[php]Instagram APIを使って特定タグの画像とリンクをjsonに保存する
久しぶりにphpを書きました。
Instagram API Console で色々試しながら、特定タグに紐づくデータを取得して、画像とリンクをjsonに保存するスクリプトを作ってみました。
API Console便利です。
# generate_api.php
<?php
class InstagramApiBatch
{
const TAG = 'タグ名'; # 取得したいタグ名
const ACCESS_TOKEN = 'YOUR_ACCESS_TOKEN'; # アクセストークン
const MAX_PAGR = 10; # 最大取得ページ数
const API_FILE_PATH = './'; # jsonの保存先
private $base_url;
private $exclude_link_list;
function __construct() {
# 33件が一度に取得できる最大値のようなのでcount=33
$this->base_url = 'https://api.instagram.com/v1/tags/'. self::TAG . '/media/recent?access_token=' . self::ACCESS_TOKEN . '&count=33';
# 除外したい写真のURLを配列内に記述 : 'http://instagram.com/p/{一意なキー}/'
$this->exclude_link_list = array();
}
public function run() {
$this->get_tags($this->base_url, 1);
}
private function get_tags($next_url, $page) {
$obj = json_decode(file_get_contents($next_url));
$list = array();
foreach($obj->data as $data) {
if (in_array($data->link, $this->exclude_link_list)) {
continue;
}
array_push($list, array(
'image_url' => $data->images->low_resolution->url,
'link' => $data->link,
));
}
$this->write_api($list, $page);
if ($page >= self::MAX_PAGE) {
return;
}
if (isset($obj->pagination->next_url)) {
$this->get_tags($obj->pagination->next_url, $page + 1);
}
}
private function write_api($data, $no) {
$file = self::API_FILE_PATH . "$no.json";
$fp = fopen($file, 'w');
fwrite($fp, json_encode($data));
fclose($fp);
}
}
$instagram = new InstagramApiBatch();
$instagram->run();
アクセストークンと取得したいタグを指定した後
php generate_api.php
を実行すると、1.json ~ 10.jsonが生成されます。
認証済みアプリのAPI制限は 5000req/hour(1トークンあたり)なので制限に引っかからない範囲でcronで定期取得するようにしておけばよさそうです。
あとはjsからajaxでjsonを呼び出せばInstagramの写真取得機能が作れます。