Instagramに写真を投稿するときにタグをいろいろ付けると思うのですが、"自分の(特定ユーザーの)投稿の中から" 特定のタグを付けた写真だけを見たいときに、公式アプリやサイトだと絞り込みできないので、APIを調べて試してみました。
Instagram APIについて
APIを使うには、インスタ公式のデベロッパーサイトに登録したりなんやかんや必要です。
Qiitaにアップされている以下の記事が参考になりました。
Instagram APIの利用方法
Instagram APIを使ってWebページに表示する
Sandboxモードに限るので、最新の投稿20件しかデータを取得できません。目的からするとあまり実用的ではないのでご注意。
また、Sandboxユーザーを追加する際には、追加されるユーザー(招待を受けるユーザー)もデベロッパーサイトへの登録が必要でした(アプリの登録は招待する側のみでOK)。上記の記事にはそこが書かれていなくてちょっとハマりました。
APIでインスタのデータを取得(PHP)
// アクセストークンと、取得したいユーザーID
$accessToken = "xxxxxxxxxxxxxxxxxxxxxxxx";
$userID = "xxxxxxxxxx";
// APIからデータを取得
$instaData = file_get_contents('https://api.instagram.com/v1/users/'.$userID.'/media/recent/?access_token='.$accessToken);
$instaData = json_decode($instaData);
$instaData = $instaData->data;
//ユーザー情報
$data_u = array();
$data_u['full_name'] = $instaData[0]->user->full_name;
$data_u['profile_picture'] = $instaData[0]->user->profile_picture;
$data_u['user_name'] = $instaData[0]->user->username;
ユーザー情報などは扱いやすいように配列に入れておくと便利です。
タグ毎にデータを分割する
取得したデータの中に、タグの配列も入っているので、そこから絞り込みたいタグでデータを分けます。
// 初期化
$data_1 = array();
$data_2 = array();
$data_3 = array();
$tag_1 = 'タグの名前';
$tag_2 = 'タグの名前';
$tag_3 = 'タグの名前';
// データを分割
for ($i = 0; $i < count($instaData); $i++) {
// フラグ初期化
$flag_1 = false;
$flag_2 = false;
$flag_3 = false;
// 投稿に付いているタグを検索し、フラグを設定
for ($j = 0; $j < count($instaData[$i]->tags); $j++) {
if ($instaData[$i]->tags[$j] == $tag_1) {
$flag_1 = true;
} else if ($instaData[$i]->tags[$j] == $tag_2) {
$flag_2 = true;
} else if ($instaData[$i]->tags[$j] == $tag_3) {
$flag_3 = true;
}
}
// フラグ毎に対応する配列に格納
if ($flag_1) {
$data_1[] = $instaData[$i];
}
if ($flag_2) {
$data_2[] = $instaData[$i];
}
if ($flag_3) {
$data_3[] = $instaData[$i];
}
}
タグ毎に表示する
HTMLは以下のような感じでタグ毎に一覧表示できます。
<body>
<div id="content">
<div id="profile">
<p><? echo $data_u['user_name']; ?></p>
<img src="<? echo $data_u['profile_picture']; ?>" />
</div>
<div id="list_box">
<dl id="list_1">
<dt><? echo $tag_1; ?></dt>
<?php
for ($i = 0; $i < count($data_1); $i++) {
echo '<dd><img src="'.$data_1[$i]->images->standard_resolution->url.'" /></dd>';
}
?>
</dl>
<dl id="list_2">
<dt><? echo $tag_2; ?></dt>
<?php
for ($i = 0; $i < count($data_2); $i++) {
echo '<dd><img src="'.$data_2[$i]->images->standard_resolution->url.'" /></dd>';
}
?>
</dl>
<dl id="list_3">
<dt><? echo $tag_3; ?></dt>
<?php
for ($i = 0; $i < count($data_3); $i++) {
echo '<dd><img src="'.$data_3[$i]->images->standard_resolution->url.'" /></dd>';
}
?>
</dl>
</div>
</div>
</body>
これを使って何がしたかったか
インスタのアカウントを複数作って、読書アカウント、猫アカウント、ゲームアカウントみたいに分けて使っています。
でも、できればインスタアカウントは一つで、投稿時にタグ付けさえちゃんとしておけば、見たいタグの投稿だけ絞り込めるようにしたかったんですが。
Sandboxの制限がある以上は実用的でないので仕方ないですね。なのでやっぱり、アカウント分けてやる方がいいのかなーと思います。
