1

私は小さなプロジェクトに取り組んでおり、この場合は「子猫」でタグ付けされた画像をユーザーが見ることができます。Instagram は 1 時間あたり 5000 リクエストしか許可していません。これに達するとは思いませんが、とにかくキャッシュすることを選択しています。また、バックリンクを機能させる方法がわからないためです。次のページへのリンクしか取得できず、最近のページへのリンクが現在のページ、つまりそれ自体へのリンクになります。また、API は、14 の場合もあれば 20 の場合もあるなど、奇妙な数の画像を返すことがあります。ページごとに常に 20 枚の画像を表示し、5 ページ (100 枚の画像) しか持たないようにしたい。そして、このファイルを 5/10 分ごとに更新します。

だから、私の計画は100枚くらいの画像をファイルに保存することです。動作しましたが、信じられないほど遅いです。コードは次のようになります。

$cachefile = "instagram_cache/".TAG.".cache";
$num_requests = 0; //Just for developing and check how many request it does

//If the file does not exsists or is older than *UPDATE_CACHE_TIME* seconds
if (!file_exists($cachefile) || time()-filemtime($cachefile) > UPDATE_CACHE_TIME)
{
    $images = array();
    $current_file = "https://api.instagram.com/v1/tags/".TAG."/media/recent?client_id=".INSTAGRAM_CLIENT_ID;
    $current_image_index = 0;


    for($i = 0; $i >= 0; $i++)
    {
        //Get data from API
        $contents = file_get_contents($current_file);

        $num_requests++;
        //Decode it!
        $json = json_decode($contents, true);

        //Get what we want!
        foreach ($json["data"] as $x => $value)
        {                
            array_push($images, array(
                'img_nr' => $current_image_index,
                'thumb' => $value["images"]["thumbnail"]["url"],
                'fullsize' => $value["images"]["standard_resolution"]["url"],
                'link' => $value["link"], 
                'time' => date("d M", $value["created_time"]),
                'nick' => $value["user"]["username"],
                'avatar' => $value["user"]["profile_picture"],
                'text' => $value['caption']['text'],
                'likes' => $value['likes']['count'],
                'comments' => $value['comments']['data'],
                'num_comments' => $value['comments']['count'],
            ));

            //Check if the requested amount of images is equal or more...
            if($current_image_index > MAXIMUM_IMAGES_TO_GET)
                break;

            $current_image_index++;

        }
        //Check if the requested amount of images is equal or more, even in this loop...
        if($current_image_index > MAXIMUM_IMAGES_TO_GET)
            break;
        if($json['pagination']['next_url'])
            $current_file = $json['pagination']['next_url'];

        else
            break; //No more files to get!

    }
    file_put_contents($cachefile, json_encode($images));

これは非常に醜いハックのように感じます。これをうまく機能させるためのアイデアはありますか?

または、その「バックリンク」を本来のように機能させる方法を教えてくれる人はいますか? (はい、私は js をはい、歴史の -1 に行くことができますが、いいえ!)。

アイデア、提案、ヘルプ、コメントなどを歓迎します。

4

1 に答える 1