3
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Instagramの写真をタグ毎に表示する

Posted at

Instagramに写真を投稿するときにタグをいろいろ付けると思うのですが、"自分の(特定ユーザーの)投稿の中から" 特定のタグを付けた写真だけを見たいときに、公式アプリやサイトだと絞り込みできないので、APIを調べて試してみました。

スクリーンショット 2018-01-14 19.53.26.png
※phpをアップする場所がなかったので画面イメージだけ

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の制限がある以上は実用的でないので仕方ないですね。なのでやっぱり、アカウント分けてやる方がいいのかなーと思います。

3
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?