Instagram APIを未申請の利用はSandboxモードのみです。
Sandboxモードは最新のフィード20枚のみ取得できます(2016年9月時点)。
該当ユーザーの最新フィードを取得します。
フィード取得に必要な情報は下記2つです。
(ユーザーID ,アクセストークンを取得済みのとき)最新のフィードを取得するリクエストです。
https://api.instagram.com/v1/users/<user_id>/media/recent?access_token=<access_token>
ユーザーIDはユーザー名から調べることができます(ユーザー名とユーザーIDは異なります。)
ユーザーIDは下記URLでユーザー名から検索できます。
アクセストークンの取得に必要な情報は下記
クライアントをInstagram APIのManage Clients > Register a New Clientで登録します。
REDIRECT URIはクライアントを登録するときに指定します。アクセストークンを取得するリクエストのredirect_uriパラメーターへここで設定した値を指定します。
CLIENT IDはクライアントを登録した際に自動で発行されます。
アクセストークンは下記リクエストで取得できます。
https://instagram.com/oauth/authorize/?client_id=&redirect_uri=&response_type=token
上記によるアクセストークン取得はimplicit Authenticationになります。
Instagram API管理画面のManage Clients > SecurityでDisable implicit OAuthのチェックを外してください。
REDIRECT URIへ返されるレスポンス例
http://www.example.com/#access_token=xxxxxxxxx.xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
<?php
/**
* Instagra サムネイル表示
*
* @package InfoTown
* @subpackage SNS
* @author Hiroshi Sawai <info@info-town.jp>
* @copyright Hiroshi Sawai
* @version 1.0.0
* @since 1.0.0
*/
// themes/mytheme/includes/sns/instagram.php
class Instagram {
// user情報
private $user_name;
private $user_id;
private $access_token;
private $api_uri;
// cURL接続情報
private $options;
private $url;
private $ch;
private $count;
function __construct( $params ) {
$default = array(
'request_type' => 0,
'count' => 6,
);
$params = array_merge( $default, $params );
$this->options['request_type'] = 0;
$this->ch = curl_init();
$this->api_url = $params['api_url'] . $params['user_id'] . '/media/recent?access_token=' . $params['access_token'];
$this->count = $params['count'];
$this->uri = $this->api_url . '&count=' . $this->count;
}
public function get($type='json') {
$json = $this->fetch();
$images = $this->format( $json );
if ('json' === $type) {
return $images;
}
if ('html' === $type) {
$this->output($images);
}
return $images;
}
/**
* Instagram APIで画像情報取得(JSON)
*
* @return mixed 取得したJSON
*/
private function fetch() {
curl_setopt( $this->ch, CURLOPT_URL, $this->uri );
curl_setopt( $this->ch, CURLOPT_POST, $this->options['request_type'] );
if ( ! empty( $options['post'] ) ) {
curl_setopt( $this->ch, CURLOPT_POSTFIELDS, $options['post'] );
}
curl_setopt( $this->ch, CURLOPT_SSL_VERIFYPEER, false );
curl_setopt( $this->ch, CURLOPT_RETURNTRANSFER, 1 );
$json = curl_exec( $this->ch );
curl_close( $this->ch );
return $json;
}
/**
* 画像情報をJSONから表示用配列に整形
*
* @param string $json JSON形式の画像情報
*
* @return mixed 表示用に整形した画像情報配列
*/
private function format( $json ) {
// 画像情報(JSON)を配列へ
$images = array();
if ( ! empty( $json ) ) {
foreach ( json_decode( $json )->data as $item ) {
$src = $item->images->standard_resolution->url;
$thumb = $item->images->thumbnail->url;
$url = $item->link;
$images[] = array(
"src" => htmlspecialchars( $src ),
"thumb" => htmlspecialchars( $thumb ),
"url" => htmlspecialchars( $url ),
);
}
}
return $images;
}
/**
* 画像出力
*/
private function output( $images ) {
if ( ! empty( $images ) ) {
echo '<ul>';
foreach ( $images as $image ) {
echo '<li><a href="' . $image['url'] . '"><img src="' . $image['thumb'] . '"></a></li>';
}
echo '</ul>';
}
}
}
表示したいテンプレートへの記載です。
require_once( get_template_directory() . '/includes/sns/instagram.php' );
$params = array(
'user_name' => 'example',
'user_id' => 'xxxxxxxxxxx',
'access_token' => 'xxxxxxxxxxx',
'api_url' => 'https://api.instagram.com/v1/users/',
'count' => 6,
);
$instagram = new Instagram( $params );
$instagram->get('html');
No comments yet.
改行と段落タグは自動で挿入されます。
メールアドレスは表示されません。