Vineの非公式APIの使い方まとめ (サンプルコード付き)

Vineの非公式APIの使い方まとめ (サンプルコード付き)

Twitterが運営する、6秒動画の投稿SNS、Vine。2015年9月現在、公式に公開しているAPIはないのですが、非公式に利用できるAPIが存在していて、今や、それを使ったウェブサービスが溢れ返っている状況です…。「いきなり使えなくなったらどうするのかしら…」という不安とともに利用してみたい人のために、判明している使用方法をまとめました。

BASIC認証

非公式ということもあり、VineのAPIにはアクセストークンを用いた認証システムは存在せず、認証にはBASIC認証という形式を利用します。これは、普段、ユーザーとして利用しているID(Eメール)とパスワードをそのまま使うということですね。認証が必要なリクエストでは、BASIC認証で取得した認証キーを使っていくことになります。

エンドポイント

下記のURLアドレスにPOSTメソッドでリクエストを送って下さい。

POST https://api.vineapp.com/users/authenticate

パラメータ

リクエストに必要なパラメータの一覧です。

username
Vineで利用しているアカウントの、Eメールです。Twitterアカウントで始めていて、Eメールをまだ登録していない人は、登録する必要があります。
password
Vineで利用しているアカウントの、パスワードです。

取得できるJSON

リクエストに成功すると、認証キーと、簡単なプロフィール情報を取得することができます。Vine全般に言えることですが、userIdに含まれる数値のユーザーIDは、桁が多過ぎるくせに、int型です。そのため、工夫しないと、PHPやJavaScriptで取り扱う時に丸められてしまいます。

JSON

{"code": "", "data": {"username": "Yuta Arai", "edition": "JP", "userId": 909935838471794688, "key": "90993383841794688-2c913538-42ba-1d37-a296-eefb82f298bf", "avatarUrl": "http://v.cdn.vine.co/r/avatars/6D78FFD75D1086343523722473472_2e5f7349ae7.0.3.jpg?versionId=x2jga33b3560lWsCtv4DEqKaJh6jFzmn"}, "success": true, "error": ""}

サンプルプログラム

下記はサンプルコードです。ユーザーID(Eメール)とパスワードを指定して起動することで、取得した認証キーを、ブラウザに出力します。

PHP

<?php

	// 設定項目
	$params = array(
		'username' => '' ,	// ユーザーID (Eメール)
		'password' => '' ,	// パスワード
	) ;

	// BASIC認証のリクエスト
	$curl = curl_init() ;
	curl_setopt( $curl , CURLOPT_URL , 'https://api.vineapp.com/users/authenticate' ) ;
	curl_setopt( $curl , CURLOPT_CUSTOMREQUEST , 'POST' ) ;
	curl_setopt( $curl , CURLOPT_HEADER, 1 ) ; 
	curl_setopt( $curl , CURLOPT_SSL_VERIFYPEER , false ) ;
	curl_setopt( $curl , CURLOPT_RETURNTRANSFER , true ) ;
	curl_setopt( $curl , CURLOPT_POSTFIELDS , http_build_query( $params ) ) ;
	curl_setopt( $curl , CURLOPT_TIMEOUT , 5 ) ;
	$res1 = curl_exec( $curl ) ;
	$res2 = curl_getinfo( $curl ) ;
	curl_close( $curl ) ;

	// 取得したデータ
	$json = substr( $res1, $res2['header_size'] ) ;			// 取得したデータ(JSONなど)
	$header = substr( $res1, 0, $res2['header_size'] ) ;		// レスポンスヘッダー (検証に利用したい場合にどうぞ)

	// 取得したJSONをオブジェクト型に変換
	$obj = json_decode( $json ) ;

	// HTML用
	$html = '' ;

	// 実行結果を出力
	$html .= '<h2>実行結果</h2>' ;

	// エラー判定
	if( !isset( $obj->data->key ) )
	{
		$html .= '<p><mark>BASIC認証に失敗しました…。Eメール、またはパスワードが間違っている可能性があります。</mark></p>' ;
	}
	else
	{
		// 各データ
		$auth_key = $obj->data->key ;		// 認証キー
		$username = $obj->data->username ;		// ユーザーネーム
		$userId = (string)$obj->data->userId ;		// ユーザーID
		$avatarUrl = (string)$obj->data->avatarUrl ;		// アバター画像

		// 出力
		$html .= '<dl>' ;
		$html .= 	'<dt>認証キー</dt>' ;
		$html .= 		'<dd><mark>' . $auth_key . '</mark></dd>' ;
		$html .= 	'<dt>ユーザーネーム</dt>' ;
		$html .= 		'<dd>' . $username . '</dd>' ;
		$html .= 	'<dt>ユーザーID</dt>' ;
		$html .= 		'<dd><a href="https://vine.co/u/' . $userId . '" target="_blank">' . $userId . '</a></dd>' ;
		$html .= 	'<dt>アバター画像</dt>' ;
		$html .= 		'<dd><img class="_img" src="' . $avatarUrl . '" width="75" height="auto"></dd>' ;
		$html .= '</dl>' ;
	}

	// 取得したデータ
	$html .= '<h2>取得したデータ</h2>' ;
	$html .= '<p>下記のデータを取得できました。</p>' ;
	$html .= 	'<h3>JSON</h3>' ;
	$html .= 	'<p><textarea rows="8">' . $json . '</textarea></p>' ;
	$html .= 	'<h3>レスポンスヘッダー</h3>' ;
	$html .= 	'<p><textarea rows="8">' . $header . '</textarea></p>' ;

?>

<?php
	// ブラウザに[$html]を出力 (HTMLのヘッダーとフッターを付けましょう)
	echo $html ;
?>

認証リクエストをする方法

認証キーを用いてリクエストをするには、カスタムヘッダーのvine-session-idに、認証キーをセットして、リクエストをする必要があります。

vine-session-id: {認証キー}

例えば、PHPの場合は下記の通りです。

PHP

<?php
	// 認証キー
	$auth_key = '' ;

	// リクエストURL
	$request_url = '...' ;

	$curl = curl_init() ;
	curl_setopt( $curl , CURLOPT_URL , $request_url ) ;
	curl_setopt( $curl , CURLOPT_HEADER, 1 ) ; 
	curl_setopt( $curl , CURLOPT_HTTPHEADER , array( 'vine-session-id: ' . $auth_key . "\r\n" ) ) ;
	curl_setopt( $curl , CURLOPT_SSL_VERIFYPEER , false ) ;
	curl_setopt( $curl , CURLOPT_RETURNTRANSFER , true ) ;
	curl_setopt( $curl , CURLOPT_TIMEOUT , 5 ) ;
	$res1 = curl_exec( $curl ) ;
	$res2 = curl_getinfo( $curl ) ;
	curl_close( $curl ) ;

	// 取得したデータ
	$json = substr( $res1, $res2['header_size'] ) ;		// 取得したデータ(JSONなど)
	$header = substr( $res1, 0, $res2['header_size'] ) ;	// レスポンスヘッダー (検証に利用したい場合にどうぞ)

プロフィールを取得する

ユーザーIDを指定して、そのユーザーの詳細なプロフィールを取得することができます。認証は不要ですが、認証をすると、より詳しい情報を取得できることがあります。

エンドポイント

下記のURLアドレスにGETメソッドでリクエストを送って下さい。ユーザーIDは、認証リクエスト時に自分のプロフィールを取得する場合には、meで大丈夫です。

GET https://api.vineapp.com/users/profiles/{ユーザーID}

パラメータ

オプションとなるパラメータはありません。

取得できるJSON

リクエストに成功すると、認証キーと、簡単なプロフィール情報を取得することができます。認証して取得する場合、認証しないよりも、より多くのデータが含まれていることを確認して下さい。具体的には、自分のプロフィールの場合は電話番号、Eメールなど、他人のプロフィールの場合は、自分との関係性を示すデータが追加されています。また、非公開モードのユーザーのプロフィールを取得する場合、さらに取得できるデータは限定されます。

認証した場合

JSON

{"code": "", "data": {"followerCount": 29, "includePromoted": 1, "hiddenPhoneNumber": 1, "userId": 909935838471794688, "private": 0, "hiddenEmail": 1, "edition": "JP", "postCount": 14, "verifiedEmail": 1, "explicitContent": 0, "blocked": 0, "verified": 0, "loopCount": 795, "avatarUrl": "http://v.cdn.vine.co/r/avatars/6D78FFD75D1086343523722473472_2e5f7349ae7.0.3.jpg?versionId=x2jga33b3560lWsCtv4DEqKaJh6jFzmn", "authoredPostCount": 14, "description": "\u3042\u3089\u3086\u3067\u3059\u3002\u3053\u3093\u306b\u3061\u306f\u30fc\u3002", "blocking": 0, "phoneNumber": "+819012345678", "location": "Tokyo,Japan", "notifyActivity": 1, "facebookConnected": 1, "statsTags": {"e12": "1"}, "email": "xxxx.xxxx.0101@icloud.com", "username": "Yuta Arai", "vanityUrls": ["arayu"], "following": 0, "twitterConnected": 1, "verifiedPhoneNumber": 1, "hiddenTwitter": 1, "likeCount": 2, "notifyMessages": 1, "twitterScreenname": null, "twitterId": 1528352858, "acceptsOutOfNetworkConversations": 0, "disableAddressBook": 1, "shareUrl": "https://vine.co/arayu", "profileBackground": "0x7870cc", "notifyPosts": 0, "followingCount": 0, "repostsEnabled": 0}, "success": true, "error": ""}

認証していない場合

JSON

{"code": "", "data": {"username": "Yuta Arai", "followerCount": 29, "verified": 0, "vanityUrls": ["arayu"], "loopCount": 795, "avatarUrl": "http://v.cdn.vine.co/r/avatars/6D78FFD75D1086343523722473472_2e5f7349ae7.0.3.jpg?versionId=x2jga33b3560lWsCtv4DEqKaJh6jFzmn", "authoredPostCount": 14, "shareUrl": "https://vine.co/arayu", "userId": 909935838471794688, "postCount": 14, "profileBackground": "0x7870cc", "likeCount": 2, "private": 0, "location": "Tokyo,Japan", "followingCount": 0, "explicitContent": 0, "description": "\u3042\u3089\u3086\u3067\u3059\u3002\u3053\u3093\u306b\u3061\u306f\u30fc\u3002"}, "success": true, "error": ""}

非公開モードのユーザー

JSON

{
    "code": "",
    "data": {
        "username": "Yuta Arai",
        "verified": 0,
        "vanityUrls": [

        ],
        "avatarUrl": "http://v.cdn.vine.co/r/avatars/A078FE7CB2966672600900259840_13f147460e7.3_f8F.wQ2LhxExVuB6DnozYYyRDtAZX5Kc2nc1Omf0PsIzQS.R3m8uIOPjEmQ6Gg0j.jpg?versionId=uUyxHhm9IWqoWPGMPwoPfcXfAhzZYKj0",
        "userId": 909935838471794688,
        "private": 1,
        "location": "Tokyo,Japan",
        "explicitContent": 0,
        "description": "あらゆです。こんにちはー。"
    },
    "success": true,
    "error": ""
}

各プロパティの説明

JSONの主な項目の説明です。

followerCount
フォロワー数。
hiddenPhoneNumber
電話番号を検索対象外にしているか。
userId
ユーザーID。
private
非公開モードにしているか。
hiddenEmail
メールアドレスを検索対象外にしているか。
edition
言語。
postCount
投稿数。Revineを含む。
verifiedEmail
メールアドレスは認証済みか。
explicitContent
不適切な可能性のあるコンテンツの数。
blocked
認証キーのユーザーは、このユーザーにブロックされているか。
verified
認証済みのアカウントか。
loopCount
投稿した動画の総ループ回数。
avatarUrl
アイコン画像のURL。
authoredPostCount
投稿数。Revineを含まない。
description
紹介文。
blocking
認証キーのユーザーが、このユーザーをブロックしているか。
phoneNumber
電話番号。
location
場所。
facebookConnected
Facebookと連携しているか。
email
メールアドレス。
username
ユーザーネーム。
vanityUrls
カスタムURL。
following
認証キーのユーザーが、このユーザーをフォローしているか。
twitterConnected
Twitterと連携しているか。
verifiedPhoneNumber
電話番号を認証しているか。
hiddenTwitter
Twitterアカウントを検索対象外にしているか。
likeCount
お気に入りの数。
twitterScreenname
連携しているTwitterのスクリーンネーム。
twitterId
連携しているTwitterのユーザーID。
disableAddressBook
Vineが連絡先にアクセスするのを拒否しているか。
shareUrl
プロフィールページのパーマリンク。
followingCount
フォロー数。

サンプルプログラム

以上を踏まえて作成した、ユーザープロフィールを取得するためのサンプルコードです。デモは、私(あらゆ)のプロフィールを取得しています。

PHP

<?php

	// 認証キー
	$auth_key = '' ;

	// 取得するユーザーID
	$user_id = 'me' ;

	// リクエストURL
	$request_url = 'https://api.vineapp.com/users/profiles/' . $user_id ;

	// BASIC認証のリクエスト
	$curl = curl_init() ;
	curl_setopt( $curl , CURLOPT_URL , $request_url ) ;
	curl_setopt( $curl , CURLOPT_HEADER, 1 ) ; 
	curl_setopt( $curl , CURLOPT_HTTPHEADER , array( 'vine-session-id: ' . $auth_key . "\r\n" ) ) ;
	curl_setopt( $curl , CURLOPT_SSL_VERIFYPEER , false ) ;
	curl_setopt( $curl , CURLOPT_RETURNTRANSFER , true ) ;
	curl_setopt( $curl , CURLOPT_TIMEOUT , 5 ) ;
	$res1 = curl_exec( $curl ) ;
	$res2 = curl_getinfo( $curl ) ;
	curl_close( $curl ) ;

	// 取得したデータ
	$json = substr( $res1, $res2['header_size'] ) ;			// 取得したデータ(JSONなど)
	$header = substr( $res1, 0, $res2['header_size'] ) ;		// レスポンスヘッダー (検証に利用したい場合にどうぞ)

	// HTML用
	$html = '' ;

	// JSONデータをオブジェクト形式に変換する
	$obj = json_decode( $json ) ;

	// 実行結果の出力
	$html .= '<h2>実行結果</h2>' ;

	// エラー判定
	if( !$obj || !isset($obj->data) || empty($obj->data) )
	{
		$html .= '<p>データを取得できませんでした…。設定を再確認して下さい。</p>' ;
	}
	else
	{
		// 説明
		$html .= '<p>下記のプロフィールを取得しました。</p>' ;

		// エイリアス
		$item = $obj->data ;

		// 各データの整理
		$userId = (string)$item->userId ;		// ユーザーID (文字列にキャストしないと末尾の数値が丸まる…)
		$username = $item->username ;		// ユーザー名
		$description = ( isset( $item->description ) ) ? $item->description : '' ;		// 紹介文
		$avatarUrl = ( isset( $item->avatarUrl ) ) ? $item->avatarUrl : '' ;		// アイコン画像
		$authoredPostCount = ( isset($item->authoredPostCount) ) ? $item->authoredPostCount : 0 ;		// 投稿数

		// ブラウザに出力
		$html .= '<dl>' ;
		$html .= 	'<dt>ユーザーID</dt>' ;
		$html .= 		'<dd><a href="https://vine.co/u/' . $userId . '" target="_blank">' . $userId . '</a></dd>' ;
		$html .= 	'<dt>ユーザー名</dt>' ;
		$html .= 		'<dd>' . $username . '</dd>' ;

		// 紹介文
		if( $description )
		{
			$html .= 	'<dt>紹介文</dt>' ;
			$html .= 		'<dd>' . $description . '</dd>' ;
		}

		// アイコン画像
		if( $avatarUrl )
		{
			$html .= 	'<dt>アイコン画像</dt>' ;
			$html .= 		'<dd><img class="_img" src="' . str_replace( 'http' , 'https' , $avatarUrl ) . '" width="75" height="auto"></dd>' ;
		}

		$html .= 	'<dt>投稿数</dt>' ;
		$html .= 		'<dd>' . number_format( $authoredPostCount ) . '</dd>' ;
		$html .= '</dl>' ;
	}

	// 取得したデータ
	$html .= '<h2>取得したデータ</h2>' ;
	$html .= '<p>下記のデータを取得できました。</p>' ;
	$html .= 	'<h3>JSON</h3>' ;
	$html .= 	'<p><textarea rows="8">' . $json . '</textarea></p>' ;
	$html .= 	'<h3>レスポンスヘッダー</h3>' ;
	$html .= 	'<p><textarea rows="8">' . $header . '</textarea></p>' ;

?>

<?php
	// ブラウザに[$html]を出力 (HTMLのヘッダーとフッターを付けましょう)
	echo $html ;
?>

このコードの動作を確認する

タイムライン(動画)を取得する

様々な条件を用いて、タイムライン(動画一覧)を取得することができます。

エンドポイント

様々な種類のタイムラインを取得できます。

ユーザーのタイムライン

ユーザーIDを指定して、そのユーザーのタイムラインを取得します。

GET https://api.vineapp.com/timelines/users/{ユーザーID}

人気動画のタイムライン

現在、Vine上で人気急上昇中のタイムラインを取得します。

GET https://api.vineapp.com/timelines/popular

キーワードのタイムライン

Vine全体から、指定したキーワードで動画を検索します。

GET https://api.vineapp.com/posts/search/{検索キーワード}

ハッシュタグのタイムライン

指定したハッシュタグが付けられた動画のタイムラインを取得します。

GET https://api.vineapp.com/timelines/tags/{タグ名}

Vineスタッフのピックアップ

Vineのスタッフが、手動でピックアップしたお勧め動画のタイムラインを取得します。

GET https://api.vineapp.com/timelines/promoted

ユーザーがお気に入りした動画の一覧

指定したユーザーが、お気に入りした動画の一覧を取得します。

GET https://api.vineapp.com/timelines/users/{ユーザーID}/likes

ユーザーがRevineした動画の一覧

指定したユーザーが、Revineした動画の一覧を取得します。

GET https://api.vineapp.com/timelines/users/{ユーザーID}/reposts

チャンネルのタイムライン

指定したIDに対応した、チャンネルのタイムラインを取得します。チャンネルのIDは、数字になっています。

GET https://api.vineapp.com/timelines/channels/{チャンネルID}

下記がチャンネルIDと名前の一覧表です。

Vine全体のタイムライン

Vine全体のタイムライン(新着動画一覧)を取得します。リクエストには、認証が必要です。

GET https://api.vineapp.com/timelines/global

ベニュー(場所)のタイムライン

指定したIDのベニュー(場所)に関連付けて投稿された動画のタイムラインを取得します。ベニューIDは、Foursquareのものと同じです。

GET https://api.vineapp.com/timelines/venues/{ベニューID}

指定したIDの動画

指定したIDの動画を、1件だけ取得します。

GET https://api.vineapp.com/timelines/posts/{動画ID}

指定したショートコードの動画

指定したショートコードの動画を、1件だけ取得します。ショートコードとは、動画の共有用URLの末尾に付いているコード(https://vine.co/v/OUaKTUhlgrnならOUaKTUhlgrn)です。

GET https://api.vineapp.com/timelines/posts/s/{ショートコード}

パラメータ

各エンドポイントで指定できるオプション・パラメータは下記の通りです。

size
取得件数。一度に100件まで取得することができるようです。
page
取得するページ数。デフォルトは1

取得できるJSON

リクエストに成功した時に、取得できるJSONのサンプルです。recordsプロパティの中に、取得した件数分だけの、投稿のデータが入っています。likes(お気に入り)、comments(コメント)、reposts(Revine)は、それぞれ、別途、個別に詳細を取得することができます。

JSON

{"code": "", "data": {"count": 14, "anchorStr": "990530922116247553", "records": [{"liked": 0, "videoDashUrl": null, "foursquareVenueId": null, "userId": 909935838471794688, "private": 0, "likes": {"count": 3, "anchorStr": "1132270357970071552", "records": [{"username": "Syncer", "verified": 0, "vanityUrls": ["syncer"], "created": "2014-10-10T08:08:23.000000", "userId": 1131917957837312000, "user": {"private": 0}, "likeId": 1132270357970071552}, {"username": "Yuta Arai", "verified": 0, "vanityUrls": ["arayu"], "created": "2014-10-10T08:08:51.000000", "userId": 909935838471794688, "user": {"private": 0}, "likeId": 1132270474873700352}, {"username": "SyncerJP", "verified": 0, "vanityUrls": [], "created": "2015-03-01T10:27:08.000000", "userId": 1183739417714696192, "user": {"private": 0}, "likeId": 1183764350897618944}], "previousPage": null, "backAnchor": "", "anchor": 1132270357970071552, "nextPage": null, "size": 10}, "loops": {"count": 696.0, "velocity": 0.0, "onFire": 0}, "thumbnailUrl": "http://v.cdn.vine.co/r/thumbs/E08D76229D992058787206922240_12b83b8478a.3.3.mp4_w_9mpE67buDMusH6p5ZJLDe8a8QQo7QDZyep5ws0FA33ivu0IWxf5I21b8JG3yNP.jpg?versionId=VdAQA3yE6_N5egpyeLaHNo1Pd0IKeaoy", "explicitContent": 0, "myRepostId": 0, "description": "ラーメンぶれんで食べてきました。", "verified": 0, "avatarUrl": "http://v.cdn.vine.co/r/avatars/6D78FFD75D1086343523722473472_2e5f7349ae7.0.3.jpg?versionId=x2jga33b3560lWsCtv4DEqKaJh6jFzmn", "comments": {"count": 3, "anchorStr": "1132277654746460160", "records": [], "previousPage": null, "backAnchor": "", "anchor": 1132277654746460160, "nextPage": null, "size": 10}, "entities": [], "videoLowURL": null, "blocked": 0, "username": "Yuta Arai", "videoWebmUrl": null, "vanityUrls": ["arayu"], "tags": [], "permalinkUrl": "https://vine.co/v/hvqTOgHnY7D", "following": 0, "postId": 992058792504336384, "videoUrl": "http://mtc.cdn.vine.co/r/videos/7E3D85679C992058783142391808_17c92db5f71.3.3_tg1zHe18.w_rZolcgiaeebJona0C.fl2GJoMqf_Mf81135y_fe1cHK_8zWEW9ElH.mp4?versionId=AhSjKVUonoB2eHaekSvD4LWG4he6uWWL", "followRequested": 0, "created": "2013-09-18T10:17:41.000000", "shareUrl": "https://vine.co/v/hvqTOgHnY7D", "profileBackground": "0x7870cc", "promoted": 0, "reposts": {"count": 1, "anchorStr": "1132322997932548096", "records": [], "previousPage": null, "backAnchor": "", "anchor": 1132322997932548096, "nextPage": null, "size": 10}}, {"liked": 0, "videoDashUrl": null, "foursquareVenueId": null, "userId": 909935838471794688, "private": 0, "likes": {"count": 0, "anchorStr": null, "records": [], "previousPage": null, "backAnchor": "", "anchor": null, "nextPage": null, "size": 10}, "loops": {"count": 44.0, "velocity": 0.0, "onFire": 0}, "thumbnailUrl": "http://v.cdn.vine.co/r/thumbs/9C98E301DF990530879820603392_1deeddffc6a.3.2.mp4_YujHKj_dIZevF5agWsKcU_LnREMDY.xoTaxs4jyyTxIHaLu2tO4MSWj.wtyWsDEz.jpg?versionId=ydI26enUbnOlWafdj4yagOilUhf1VX8L", "explicitContent": 0, "myRepostId": 0, "description": "\u30e9\u30fc\u30e1\u30f3\u6881\u5c71\u6cca", "verified": 0, "avatarUrl": "http://v.cdn.vine.co/r/avatars/6D78FFD75D1086343523722473472_2e5f7349ae7.0.3.jpg?versionId=x2jga33b3560lWsCtv4DEqKaJh6jFzmn", "comments": {"count": 0, "anchorStr": null, "records": [], "previousPage": null, "backAnchor": "", "anchor": null, "nextPage": null, "size": 10}, "entities": [], "videoLowURL": null, "blocked": 0, "username": "Yuta Arai", "videoWebmUrl": null, "vanityUrls": ["arayu"], "tags": [], "permalinkUrl": "https://vine.co/v/hnMtHg9trmZ", "following": 0, "postId": 990530922116247553, "videoUrl": "http://mtc.cdn.vine.co/r/videos/4E3472826A990530876960055296_1b0f8dddbe5.3.2_uPHKZmAIIWEjBmmQE5BWkCN7RHvKNH0pKDXYwHWcruYcHSyZZ72BY5Us5dKZ5RdS.mp4?versionId=k5exjj617WDnZSPIHlom95XMpM6Y2pwk", "followRequested": 0, "created": "2013-09-14T05:06:29.000000", "shareUrl": "https://vine.co/v/hnMtHg9trmZ", "profileBackground": "0x7870cc", "promoted": 0, "reposts": {"count": 0, "anchorStr": "0", "records": [], "previousPage": null, "backAnchor": "", "anchor": 0, "nextPage": null, "size": 10}}], "previousPage": null, "backAnchor": "992058792504336384", "anchor": 990530922116247553, "nextPage": 2, "size": 2}, "success": true, "error": ""}

各プロパティの説明

liked
お気に入りされた数。
foursquareVenueId
ベニューID。
userId
投稿者のユーザーID。
private
非公開モードのユーザーが投稿した動画か。
likes
この動画に付いたお気に入りに関する情報。
loops
ループに関する情報。
thumbnailUrl
サムネイル画像のURL。
explicitContent
不適切な内容を含んでいる可能性のある動画か。
description
キャプション。
avatarUrl
投稿者のアイコン画像。
comments
コメントに関する情報。
entities
エンティティの情報。
permalinkUrl
動画の個別ページのパーマリンク。
shareUrl
共有用URL(動画の個別ページのパーマリンクと同じ)。
postId
動画のID。
videoUrl
動画ファイルのURL。
created
投稿日時。
reposts
Revineに関する情報。
size
取得件数。
previousPage
前のページ番号。
nextPage
次のページ番号。

サンプルプログラム

この章を踏まえて作成した、Vineのタイムラインを取得するためのサンプルコードです。$request_urlの内容を変更することで、様々な種類のタイムラインを取得することができます。

PHP

<?php

/**************************************************
	//エンドポイントの一覧
	https://api.vineapp.com/timelines/users/{ユーザーID}		//ユーザーのタイムライン
	https://api.vineapp.com/timelines/popular					//人気動画のタイムライン
	https://api.vineapp.com/timelines/tags/{タグ名}				//ハッシュタグのタイムライン
	https://api.vineapp.com/timelines/promoted					//Vineスタッフのピックアップ
	https://api.vineapp.com/timelines/users/{ユーザーID}/likes		//ユーザーがお気に入りした動画の一覧
	https://api.vineapp.com/timelines/users/{ユーザーID}/reposts	//ユーザーがRevineした動画の一覧
	https://api.vineapp.com/timelines/channels/{チャンネルID}		//チャンネルのタイムライン
	https://api.vineapp.com/timelines/global						//Vine全体のタイムライン (要認証)
	https://api.vineapp.com/timelines/venues/{ベニューID}			//ベニュー(場所)のタイムライン
**************************************************/

	// 認証キー
	$auth_key = '' ;

	// リクエストURL
	$request_url = 'https://api.vineapp.com/timelines/promoted' ;

	// BASIC認証のリクエスト
	$curl = curl_init() ;
	curl_setopt( $curl , CURLOPT_URL , $request_url ) ;
	curl_setopt( $curl , CURLOPT_HEADER, 1 ) ; 
	if( $auth_key )
	{
		curl_setopt( $curl , CURLOPT_HTTPHEADER , array( 'vine-session-id: ' . $auth_key . "\r\n" ) ) ;
	}
	curl_setopt( $curl , CURLOPT_SSL_VERIFYPEER , false ) ;
	curl_setopt( $curl , CURLOPT_RETURNTRANSFER , true ) ;
	curl_setopt( $curl , CURLOPT_TIMEOUT , 5 ) ;
	$res1 = curl_exec( $curl ) ;
	$res2 = curl_getinfo( $curl ) ;
	curl_close( $curl ) ;

	// 取得したデータ
	$json = substr( $res1, $res2['header_size'] ) ;			// 取得したデータ(JSONなど)
	$header = substr( $res1, 0, $res2['header_size'] ) ;		// レスポンスヘッダー (検証に利用したい場合にどうぞ)

	// HTML用
	$html = '' ;

	// JSONデータをオブジェクト形式に変換する
	$obj = json_decode( $json ) ;

	// 実行結果の出力
	$html .= '<h2>実行結果</h2>' ;

	// エラー判定
	if( !$obj || !isset($obj->data->records) || empty($obj->data->records) )
	{
		$html .= '<p>データを取得できませんでした…。設定を再確認して下さい。</p>' ;
	}
	else
	{
		// 説明
		$html .= '<p>下記のタイムラインを取得しました。</p>' ;

		// 解析
		foreach( $obj->data->records as $item )
		{
			// 各データの整理
			$userId = (string)$item->userId ;		// ユーザーID (文字列にキャストしないと末尾の数値が丸まる…)
			$username = $item->username ;		// ユーザー名
			$avatarUrl = ( isset($item->avatarUrl) ) ? $item->avatarUrl : '' ;		// アバター画像
			$postId = $item->postId ;		// 動画のID
			$created = $item->created ;		// 投稿日時
			$videoUrl = $item->videoUrl ;		// 動画ファイルのURL
			$permalinkUrl = $item->permalinkUrl ;		// パーマリンク
			$thumbnailUrl = ( isset($item->thumbnailUrl) ) ? $item->thumbnailUrl : '' ;		// サムネイル画像
			$description = ( isset($item->description) ) ? $item->description : '' ;		// 紹介文
			$likes_count = ( isset($item->likes->count) ) ? $item->likes->count : 0 ;		// ライク数
			$loops_count = ( isset($item->loops->count) ) ? $item->loops->count : 0 ;		// ループ数
			$comments_count = ( isset($item->comments->count) ) ? $item->comments->count : 0 ;		// コメント数
			$reposts_count = ( isset($item->reposts->count) ) ? $item->reposts->count : 0 ;		// Revineの数

			// 日付の整形
			$created = date( 'Y/m/d H:i' , strtotime( $created ) ) ;

			// ブラウザに出力
			$html .= '<dl>' ;
			$html .= 	'<dt>ユーザーID</dt>' ;
			$html .= 		'<dd><a href="https://vine.co/u/' . $userId . '" target="_blank">' . $userId . '</a></dd>' ;
			$html .= 	'<dt>ユーザー名</dt>' ;
			$html .= 		'<dd>' . $username . '</dd>' ;

			// 紹介文
			if( $description )
			{
				$html .= 	'<dt>紹介文</dt>' ;
				$html .= 		'<dd>' . $description . '</dd>' ;
			}

			// アイコン画像
			if( $avatarUrl )
			{
				$html .= 	'<dt>アイコン画像</dt>' ;
				$html .= 		'<dd><img class="_img" src="' . str_replace( 'http' , 'https' , $avatarUrl ) . '" width="75" height="auto"></dd>' ;
			}

			$html .= 	'<dt>動画のID</dt>' ;
			$html .= 		'<dd>' . $postId . '</dd>' ;
			$html .= 	'<dt>動画のURLアドレス</dt>' ;
			$html .= 		'<dd>' . $videoUrl . '</dd>' ;
			$html .= 	'<dt>パーマリンク</dt>' ;
			$html .= 		'<dd><a href="' . $permalinkUrl . '" target="_blank">' . $permalinkUrl . '</a></dd>' ;
			$html .= 	'<dt>投稿日時</dt>' ;
			$html .= 		'<dd>' . $created . '</dd>' ;

			// サムネイル画像
			if( $thumbnailUrl )
			{
				$html .= 	'<dt>サムネイル画像</dt>' ;
				$html .= 		'<dd><img class="_img" src="' . str_replace( 'http' , 'https' , $thumbnailUrl ) . '" width="200" height="auto"></dd>' ;
			}

			// 動画の紹介文
			if( $description )
			{
				$html .= 	'<dt>動画の紹介文</dt>' ;
				$html .= 		'<dd>' . $description . '</dd>' ;
			}

			$html .= 	'<dt>ライク数</dt>' ;
			$html .= 		'<dd>' . number_format( $likes_count ) . '</dd>' ;
			$html .= 	'<dt>ループ数</dt>' ;
			$html .= 		'<dd>' . number_format( $loops_count ) . '</dd>' ;
			$html .= 	'<dt>コメント数</dt>' ;
			$html .= 		'<dd>' . number_format( $comments_count ) . '</dd>' ;
			$html .= 	'<dt>Revineの数</dt>' ;
			$html .= 		'<dd>' . number_format( $reposts_count ) . '</dd>' ;
			$html .= '</dl>' ;
		}
	}

	// 取得したデータ
	$html .= '<h2>取得したデータ</h2>' ;
	$html .= '<p>下記のデータを取得できました。</p>' ;
	$html .= 	'<h3>JSON</h3>' ;
	$html .= 	'<p><textarea rows="8">' . $json . '</textarea></p>' ;
	$html .= 	'<h3>レスポンスヘッダー</h3>' ;
	$html .= 	'<p><textarea rows="8">' . $header . '</textarea></p>' ;

?>

<?php
	// ブラウザに[$html]を出力 (HTMLのヘッダーとフッターを付けましょう)
	echo $html ;
?>

このコードの動作を確認する

ユーザー検索をする

キーワードを指定して、ユーザーを検索することができます。

エンドポイント

キーワードを指定して、それにマッチするユーザーの一覧を取得します。このリクエストに、認証は必要ありません。

GET https://api.vineapp.com/users/search/{キーワード}

パラメータ

指定できるオプション・パラメータは下記の通りです。

size
取得件数。一度に100件まで取得することができるようです。
page
取得するページ数。デフォルトは1

取得できるJSON

リクエスト成功時に取得できるJSONのサンプルです。recordsの中に、キーワードとマッチして取得できた人数分のユーザーデータが含まれています。JSONの各項目は「プロフィールを取得する」の章で紹介したJSONのデータと同じです。

JSON

{"code": "", "data": {"count": 5, "anchorStr": "0", "records": [{"username": "Yuta Arai", "verified": 0, "vanityUrls": [], "avatarUrl": "http://v.cdn.vine.co/avatars/default.png", "userId": 992601930478006272, "user": {"private": 0}, "location": null}, {"username": "SyncerJP", "verified": 0, "vanityUrls": [], "avatarUrl": "http://v.cdn.vine.co/r/avatars/637C7FA3BE1183739422844567552_3d0107be903.1.5.jpg?versionId=Bd6Ec6W1rhg2LarrFDpHur7zbUn9JAQo", "userId": 1183739417714696192, "user": {"private": 0}, "location": "Tokyo"}], "previousPage": null, "anchor": 0, "nextPage": 2, "size": 2}, "success": true, "error": ""}

ユーザーのパーマリンク

ユーザーのプロフィールページに移動させたい場合の、URLの構成です。

パーマリンク

Vineのウェブサイト上の、ユーザーのプロフィールページのパーマリンクです。ユーザーがカスタムURLを使用していたとしても、このURLアドレスでリダイレクトされます。

https://vine.co/u/{ユーザーID}

URLスキーム

アプリのURLスキームは下記の通りです。

vine://user/{ユーザーID}

サンプルプログラム

仕様を元にして、作成したサンプルプログラムが下記です。キーワードを指定してから実行すると、マッチしたユーザーのユーザーID、ユーザーネーム、アイコン画像をそれぞれ表示します。

PHP

<?php

	// 認証キー (任意)
	$auth_key = '' ;

	// 検索キーワード
	$keyword = 'syncerjp' ;

	// GETメソッドで指定がある場合
	foreach( array( 'keyword' ) as $val )
	{
		if( isset( $_GET[ $val ] ) && $_GET[ $val ] != '' )
		{
			${ $val } = $_GET[ $val ] ;
		}
	}

	// リクエストURL
	$request_url = 'https://api.vineapp.com/users/search/' . rawurlencode( $keyword ) ;

	// BASIC認証のリクエスト
	$curl = curl_init() ;
	curl_setopt( $curl , CURLOPT_URL , $request_url ) ;
	curl_setopt( $curl , CURLOPT_HEADER, 1 ) ;
	if( $auth_key )
	{
		curl_setopt( $curl , CURLOPT_HTTPHEADER , array( 'vine-session-id: ' . $auth_key . "\r\n" ) ) ;
	}
	curl_setopt( $curl , CURLOPT_SSL_VERIFYPEER , false ) ;
	curl_setopt( $curl , CURLOPT_RETURNTRANSFER , true ) ;
	curl_setopt( $curl , CURLOPT_TIMEOUT , 5 ) ;
	$res1 = curl_exec( $curl ) ;
	$res2 = curl_getinfo( $curl ) ;
	curl_close( $curl ) ;

	// 取得したデータ
	$json = substr( $res1, $res2['header_size'] ) ;			// 取得したデータ(JSONなど)
	$header = substr( $res1, 0, $res2['header_size'] ) ;		// レスポンスヘッダー (検証に利用したい場合にどうぞ)

	// HTML用
	$html = '' ;

	// JSONデータをオブジェクト形式に変換する
	$obj = json_decode( $json ) ;

	// キーワードを指定する
	$html .= '<h2>キーワードを指定する</h2>' ;
	$html .= '<p>キーワードを指定して、ユーザーを検索してみて下さい。</p>' ;
	$html .= '<form>' ;
	$html .= 	'<p><input name="keyword" value="' . $keyword . '"></p>' ;
	$html .= 	'<p><button>検索する</button></p>' ;
	$html .= '</form>' ;

	// 実行結果の出力
	$html .= '<h2>実行結果</h2>' ;

	// エラー判定
	if( !$obj || !isset($obj->data->records) || empty($obj->data->records) )
	{
		$html .= '<p>データを取得できませんでした…。設定を再確認して下さい。</p>' ;
	}
	else
	{
		// 説明
		$html .= '<p>「<b>' . $keyword . '</b>」というキーワードで、下記のユーザーがヒットしました。</p>' ;

		// 解析
		foreach( $obj->data->records as $item )
		{
			// 各データの整理
			$userId = (string)$item->userId ;		// ユーザーID (文字列にキャストしないと末尾の数値が丸まる…)
			$username = $item->username ;		// ユーザー名
			$description = ( isset( $item->description ) ) ? $item->description : '' ;		// 紹介文
			$avatarUrl = ( isset( $item->avatarUrl ) ) ? $item->avatarUrl : '' ;		// アイコン画像
			$authoredPostCount = ( isset($item->authoredPostCount) ) ? $item->authoredPostCount : 0 ;		// 投稿数

			// ブラウザに出力
			$html .= '<dl>' ;
			$html .= 	'<dt>ユーザーID</dt>' ;
			$html .= 		'<dd><a href="https://vine.co/u/' . $userId . '" target="_blank">' . $userId . '</a></dd>' ;
			$html .= 	'<dt>ユーザー名</dt>' ;
			$html .= 		'<dd>' . $username . '</dd>' ;

			// 紹介文
			if( $description )
			{
				$html .= 	'<dt>紹介文</dt>' ;
				$html .= 		'<dd>' . $description . '</dd>' ;
			}

			// アイコン画像
			if( $avatarUrl )
			{
				$html .= 	'<dt>アイコン画像</dt>' ;
				$html .= 		'<dd><img class="_img" src="' . str_replace( 'http' , 'https' , $avatarUrl ) . '" width="75" height="auto"></dd>' ;
			}

			$html .= 	'<dt>投稿数</dt>' ;
			$html .= 		'<dd>' . number_format( $authoredPostCount ) . '</dd>' ;
			$html .= '</dl>' ;
		}
	}

	// 取得したデータ
	$html .= '<h2>取得したデータ</h2>' ;
	$html .= '<p>下記のデータを取得できました。</p>' ;
	$html .= 	'<h3>JSON</h3>' ;
	$html .= 	'<p><textarea rows="8">' . $json . '</textarea></p>' ;
	$html .= 	'<h3>レスポンスヘッダー</h3>' ;
	$html .= 	'<p><textarea rows="8">' . $header . '</textarea></p>' ;

?>

<?php
	// ブラウザに[$html]を出力 (HTMLのヘッダーとフッターを付けましょう)
	echo $html ;
?>

このコードの動作を確認する

ハッシュタグ検索をする

キーワードを指定して、ハッシュタグを検索することができます。通常は取得したハッシュタグを元に、その後は、ハッシュタグのタイムラインを取得するエンドポイントにリクエストを送ることになります。

エンドポイント

キーワードを指定して、それにマッチするハッシュタグの一覧を取得します。リクエストに、認証は必要ありません。

GET https://api.vineapp.com/tags/search/{キーワード}

パラメータ

指定できるオプション・パラメータは下記の通りです。

size
取得件数。一度に100件まで取得することができるようです。
page
取得するページ数。デフォルトは1

取得できるJSON

リクエスト成功時に取得できるJSONのサンプルです。recordsの中に、ハッシュタグのデータが配列形式で格納されています。

JSON

{"code": "", "data": {"count": 38, "anchorStr": "0", "records": [{"tagId": 906303924452204544, "tag": "aquarium", "postCount": 10867}, {"tagId": 931687431357603840, "tag": "RipleysAquarium", "postCount": 375}], "previousPage": null, "anchor": 0, "nextPage": 2, "size": 2}, "success": true, "error": ""}

各プロパティの説明

tagId
タグのID。あまり利用する機会はない。
tag
タグの名称。
postCount
そのタグを付けて投稿されている動画の数。

ハッシュタグのパーマリンク

検索結果へユーザーを移動させたい場合の、URLアドレスの組み立て方です。

パーマリンク

Vineのウェブサイトで、ハッシュタグの検索結果へリンクを貼りたい場合、ハッシュタグ名を利用して、次のようにURLアドレスを組み立てます。

https://vine.co/tags/{ハッシュタグ名}

URLスキーム

スマホで直接、アプリを開かせたい場合のURLスキームは下記の通りです。

vine://tag/{ハッシュタグ名}

サンプルプログラム

Vine上に登録されているハッシュタグをキーワード検索するサンプルプログラムです。

PHP

<?php

	// 認証キー (任意)
	$auth_key = '' ;

	// 検索キーワード
	$keyword = 'snow' ;

	// GETメソッドで指定がある場合
	foreach( array( 'keyword' ) as $val )
	{
		if( isset( $_GET[ $val ] ) && $_GET[ $val ] != '' )
		{
			${ $val } = $_GET[ $val ] ;
		}
	}

	// リクエストURL
	$request_url = 'https://api.vineapp.com/tags/search/' . rawurlencode( $keyword ) ;

	// BASIC認証のリクエスト
	$curl = curl_init() ;
	curl_setopt( $curl , CURLOPT_URL , $request_url ) ;
	curl_setopt( $curl , CURLOPT_HEADER, 1 ) ;
	if( $auth_key )
	{
		curl_setopt( $curl , CURLOPT_HTTPHEADER , array( 'vine-session-id: ' . $auth_key . "\r\n" ) ) ;
	}
	curl_setopt( $curl , CURLOPT_SSL_VERIFYPEER , false ) ;
	curl_setopt( $curl , CURLOPT_RETURNTRANSFER , true ) ;
	curl_setopt( $curl , CURLOPT_TIMEOUT , 5 ) ;
	$res1 = curl_exec( $curl ) ;
	$res2 = curl_getinfo( $curl ) ;
	curl_close( $curl ) ;

	// 取得したデータ
	$json = substr( $res1, $res2['header_size'] ) ;			// 取得したデータ(JSONなど)
	$header = substr( $res1, 0, $res2['header_size'] ) ;		// レスポンスヘッダー (検証に利用したい場合にどうぞ)

	// HTML用
	$html = '' ;

	// JSONデータをオブジェクト形式に変換する
	$obj = json_decode( $json ) ;

	// キーワードを指定する
	$html .= '<h2>キーワードを指定する</h2>' ;
	$html .= '<p>キーワードを指定して、ハッシュタグを検索してみて下さい。</p>' ;
	$html .= '<form>' ;
	$html .= 	'<p><input name="keyword" value="' . $keyword . '"></p>' ;
	$html .= 	'<p><button>検索する</button></p>' ;
	$html .= '</form>' ;

	// 実行結果の出力
	$html .= '<h2>実行結果</h2>' ;

	// エラー判定
	if( !$obj || !isset($obj->data->records) || empty($obj->data->records) )
	{
		$html .= '<p>データを取得できませんでした…。設定を再確認して下さい。</p>' ;
	}
	else
	{
		// 説明
		$html .= '<p>「<b>' . $keyword . '</b>」というキーワードで、下記のハッシュタグがヒットしました。</p>' ;

		// 解析
		foreach( $obj->data->records as $item )
		{
			// 各データの整理
			$tagId = (string)$item->tagId ;		// タグID (文字列にキャストしないと末尾の数値が丸まる…)
			$tag = $item->tag ;		// タグ名
			$postCount = ( isset( $item->postCount ) ) ? $item->postCount : 0 ;		// 投稿数

			// ブラウザに出力
			$html .= '<dl>' ;
			$html .= 	'<dt>タグのID</dt>' ;
			$html .= 		'<dd>' . $tagId . '</dd>' ;
			$html .= 	'<dt>タグの名前</dt>' ;
			$html .= 		'<dd><a href="https://vine.co/tags/' . $tag . '" target="_blank">' . $tag . '</a></dd>' ;
			$html .= 	'<dt>投稿数</dt>' ;
			$html .= 		'<dd>' . number_format( $postCount ) . '</dd>' ;
			$html .= '</dl>' ;
		}
	}

	// 取得したデータ
	$html .= '<h2>取得したデータ</h2>' ;
	$html .= '<p>下記のデータを取得できました。</p>' ;
	$html .= 	'<h3>JSON</h3>' ;
	$html .= 	'<p><textarea rows="8">' . $json . '</textarea></p>' ;
	$html .= 	'<h3>レスポンスヘッダー</h3>' ;
	$html .= 	'<p><textarea rows="8">' . $header . '</textarea></p>' ;

?>

<?php
	// ブラウザに[$html]を出力 (HTMLのヘッダーとフッターを付けましょう)
	echo $html ;
?>

このコードの動作を確認する

ベニュー(場所)の検索をする

キーワードを指定して、ベニュー(場所)を検索することができます。ベニューとは、ユーザーが動画を投稿する時に関連付けた場所のことです。このベニューのデータは、Foursquareと連動しています。VineがFoursquareのAPIを使っているということですね。

エンドポイント

キーワードを指定して、それにマッチするベニュー(場所)の一覧を取得します。リクエストに、認証は必要ありません。

GET https://api.vineapp.com/venues/search/{キーワード}

パラメータ

指定できるオプション・パラメータは下記の通りです。

size
取得件数。一度に100件まで取得することができるようです。
page
取得するページ数。デフォルトは1

取得できるJSON

リクエスト成功時に取得できるJSONのサンプルです。recordsの中に、ハッシュタグのデータが配列形式で格納されています。

JSON

{"code": "", "data": {"count": 48, "anchorStr": "0", "records": [{"venueCategoryIconUrl": "https://foursquare.com/img/categories_v2/arts_entertainment/aquarium_32.png", "foursquareVenueId": "4bd7ff2ae914a593cc4552fa", "venueName": "\u3059\u307f\u3060\u6c34\u65cf\u9928", "venueCountryCode": "JP", "venueCity": "\u58a8\u7530\u533a", "venueCategoryId": "4fceea171983d5d06c3e9823", "venueCategoryShortName": "Aquarium", "venueState": "\u6771\u4eac\u90fd", "venueAddress": "\u62bc\u4e0a1-1-2"}, {"venueCategoryIconUrl": "https://foursquare.com/img/categories_v2/arts_entertainment/aquarium_32.png", "foursquareVenueId": "4b991cecf964a520266235e3", "venueName": "\u6c96\u7e04\u7f8e\u3089\u6d77\u6c34\u65cf\u9928 (Okinawa Churaumi Aquarium)", "venueCountryCode": "JP", "venueCity": "\u56fd\u982d\u90e1", "venueCategoryId": "4fceea171983d5d06c3e9823", "venueCategoryShortName": "Aquarium", "venueState": "\u6c96\u7e04\u770c", "venueAddress": "\u672c\u90e8\u753a\u5b57\u77f3\u5ddd424"}], "previousPage": null, "anchor": 0, "nextPage": 2, "size": 2}, "success": true, "error": ""}

各プロパティの説明

venueCategoryIconUrl
Foursquareで管理している、カテゴリアイコン画像。白なので、背景を黒くしないと何も見えない。
foursquareVenueId
ベニュー(場所)のID。Foursquare上で管理されているものと同一。
venueName
名称。
venueCountryCode
国。
venueCity
市区町村。
venueCategoryId
ベニュー(場所)のカテゴリID。Vineにおいては、意味を持たないデータ。
venueCategoryShortName
カテゴリ名。
venueState
都道府県。
venueAddress
町と番地。

ベニュー(場所)のパーマリンク

検索結果にユーザーをアクセスさせたい場合の、URLアドレスの構成です。

パーマリンク

Vineのウェブサイト上の、ベニューのタイムライン画面のパーマリンクです。

https://vine.co/venues/{ベニューID}

URLスキーム

スマホで直接、アプリを開かせたい場合のURLスキームは次のようになります。

vine://venue/{ベニューID}

サンプルプログラム

Vineに登録されているベニュー(場所)を、キーワードを元に検索するサンプルデモです。

PHP

<?php

	// 認証キー (任意)
	$auth_key = '' ;

	// 検索キーワード
	$keyword = '動物園' ;

	// GETメソッドで指定がある場合
	foreach( array( 'keyword' ) as $val )
	{
		if( isset( $_GET[ $val ] ) && $_GET[ $val ] != '' )
		{
			${ $val } = $_GET[ $val ] ;
		}
	}

	// リクエストURL
	$request_url = 'https://api.vineapp.com/venues/search/' . rawurlencode( $keyword ) ;

	// BASIC認証のリクエスト
	$curl = curl_init() ;
	curl_setopt( $curl , CURLOPT_URL , $request_url ) ;
	curl_setopt( $curl , CURLOPT_HEADER, 1 ) ;
	if( $auth_key )
	{
		curl_setopt( $curl , CURLOPT_HTTPHEADER , array( 'vine-session-id: ' . $auth_key . "\r\n" ) ) ;
	}
	curl_setopt( $curl , CURLOPT_SSL_VERIFYPEER , false ) ;
	curl_setopt( $curl , CURLOPT_RETURNTRANSFER , true ) ;
	curl_setopt( $curl , CURLOPT_TIMEOUT , 5 ) ;
	$res1 = curl_exec( $curl ) ;
	$res2 = curl_getinfo( $curl ) ;
	curl_close( $curl ) ;

	// 取得したデータ
	$json = substr( $res1, $res2['header_size'] ) ;			// 取得したデータ(JSONなど)
	$header = substr( $res1, 0, $res2['header_size'] ) ;		// レスポンスヘッダー (検証に利用したい場合にどうぞ)

	// HTML用
	$html = '' ;

	// JSONデータをオブジェクト形式に変換する
	$obj = json_decode( $json ) ;

	// キーワードを指定する
	$html .= '<h2>キーワードを指定する</h2>' ;
	$html .= '<p>キーワードを指定して、場所を検索してみて下さい。</p>' ;
	$html .= '<form>' ;
	$html .= 	'<p><input name="keyword" value="' . $keyword . '"></p>' ;
	$html .= 	'<p><button>検索する</button></p>' ;
	$html .= '</form>' ;

	// 実行結果の出力
	$html .= '<h2>実行結果</h2>' ;

	// エラー判定
	if( !$obj || !isset($obj->data->records) || empty($obj->data->records) )
	{
		$html .= '<p>データを取得できませんでした…。設定を再確認して下さい。</p>' ;
	}
	else
	{
		// 説明
		$html .= '<p>「<b>' . $keyword . '</b>」というキーワードで、下記の場所がヒットしました。</p>' ;

		// 解析
		foreach( $obj->data->records as $item )
		{
			// 各データの整理
			$foursquareVenueId = $item->foursquareVenueId ;		// ベニューID
			$venueName = $item->venueName ;		// 場所名

			// ブラウザに出力
			$html .= '<dl>' ;
			$html .= 	'<dt>タグのID</dt>' ;
			$html .= 		'<dd><a href="https://vine.co/venues/' . $foursquareVenueId . '" target="_blank">' . $foursquareVenueId . '</a></dd>' ;
			$html .= 	'<dt>タグの名前</dt>' ;
			$html .= 		'<dd>' . $venueName . '</dd>' ;
			$html .= '</dl>' ;
		}
	}

	// 取得したデータ
	$html .= '<h2>取得したデータ</h2>' ;
	$html .= '<p>下記のデータを取得できました。</p>' ;
	$html .= 	'<h3>JSON</h3>' ;
	$html .= 	'<p><textarea rows="8">' . $json . '</textarea></p>' ;
	$html .= 	'<h3>レスポンスヘッダー</h3>' ;
	$html .= 	'<p><textarea rows="8">' . $header . '</textarea></p>' ;

?>

<?php
	// ブラウザに[$html]を出力 (HTMLのヘッダーとフッターを付けましょう)
	echo $html ;
?>

このコードの動作を確認する

コメントを取得する

動画のID(postId)を指定して、その動画に付いたコメントの情報を取得することができます。

エンドポイント

下記URLに、GETメソッドでリクエストを送ります。リクエストには認証が必要です。

GET https://api.vineapp.com/posts/{動画のID}/comments

取得できるJSON

リクエスト成功時に取得できるJSONのサンプルです。recordsの中に、取得した件数分のコメントデータが配列形式で格納されています。

JSON

{"code": "", "data": {"count": 23206, "anchorStr": "1188354902494236672", "records": [{"comment": "Probably the most stupidest vine I have ever seen", "username": "TRINITY GARCIA", "verified": 0, "vanityUrls": [], "flags|platform_lo": 1, "avatarUrl": "http://v.cdn.vine.co/r/avatars/B86B0207461188370728681402368_pic-r-1426303871550e40c042f7a.jpg.jpg?versionId=Zpt70eXsaPHeshksJWEOaQsRp15Tjt_m", "created": "2015-03-14T02:28:21.000000", "userId": 1177821670376153088, "modified": "2015-03-14T02:28:21.000000", "entities": [], "location": "LA", "commentId": 1188354902494236672, "postId": 1049109950888337408, "flags|platform_hi": 0, "user": {"username": "TRINITY GARCIA", "verified": 0, "vanityUrls": [], "avatarUrl": "http://v.cdn.vine.co/r/avatars/B86B0207461188370728681402368_pic-r-1426303871550e40c042f7a.jpg.jpg?versionId=Zpt70eXsaPHeshksJWEOaQsRp15Tjt_m", "description": "#BAE", "userId": 1177821670376153088, "profileBackground": "0xf279ac", "private": 0, "location": "LA"}}, {"comment": "Ahahhahah:-P", "username": "Michelle Acosta", "verified": 0, "vanityUrls": [], "flags|platform_lo": 1, "avatarUrl": "http://v.cdn.vine.co/r/avatars/A27F098A5E1188352283126468608_pic-r-14262994623336c2686e4fb.jpg.jpg?versionId=gLGXoK2_3H7kWuyxMJXegK8Yk33J3a8H", "created": "2015-03-14T02:56:08.000000", "userId": 1188352274498465792, "modified": "2015-03-14T02:56:08.000000", "entities": [], "location": null, "commentId": 1188361897050058752, "postId": 1049109950888337408, "flags|platform_hi": 0, "user": {"username": "Michelle Acosta", "verified": 0, "vanityUrls": [], "avatarUrl": "http://v.cdn.vine.co/r/avatars/A27F098A5E1188352283126468608_pic-r-14262994623336c2686e4fb.jpg.jpg?versionId=gLGXoK2_3H7kWuyxMJXegK8Yk33J3a8H", "userId": 1188352274498465792, "private": 0, "location": null, "description": null}}], "previousPage": null, "backAnchor": "", "anchor": 1188354902494236672, "nextPage": 2, "size": 2}, "success": true, "error": ""}

各プロパティの説明

JSONの主な項目の説明です。その他、含まれるユーザーに関するデータは、「プロフィールを取得する」の章をご参考下さい。

commentId
コメントID。
comment
コメントの内容。
created
コメントの投稿日時。
userId
ユーザーID。
username
ユーザー名。

サンプルプログラム

動画のIDを指定して、その動画に付いたコメントの一覧を取得するサンプルデモです。

PHP

<?php

	// 認証キー (必要)
	$auth_key = '' ;

	// 動画IDを指定
	$post_id = '1049109950888337408' ;

	// GETメソッドで指定がある場合
	foreach( array( 'post_id' ) as $val )
	{
		if( isset( $_GET[ $val ] ) && $_GET[ $val ] != '' )
		{
			${ $val } = $_GET[ $val ] ;
		}
	}

	// リクエストURL
	$request_url = 'https://api.vineapp.com/posts/' . $post_id . '/comments' ;

	// BASIC認証のリクエスト
	$curl = curl_init() ;
	curl_setopt( $curl , CURLOPT_URL , $request_url ) ;
	curl_setopt( $curl , CURLOPT_HEADER, 1 ) ;
	if( $auth_key )
	{
		curl_setopt( $curl , CURLOPT_HTTPHEADER , array( 'vine-session-id: ' . $auth_key . "\r\n" ) ) ;
	}
	curl_setopt( $curl , CURLOPT_SSL_VERIFYPEER , false ) ;
	curl_setopt( $curl , CURLOPT_RETURNTRANSFER , true ) ;
	curl_setopt( $curl , CURLOPT_TIMEOUT , 5 ) ;
	$res1 = curl_exec( $curl ) ;
	$res2 = curl_getinfo( $curl ) ;
	curl_close( $curl ) ;

	// 取得したデータ
	$json = substr( $res1, $res2['header_size'] ) ;			// 取得したデータ(JSONなど)
	$header = substr( $res1, 0, $res2['header_size'] ) ;		// レスポンスヘッダー (検証に利用したい場合にどうぞ)

	// HTML用
	$html = '' ;

	// JSONデータをオブジェクト形式に変換する
	$obj = json_decode( $json ) ;

	// キーワードを指定する
	$html .= '<h2>動画IDを指定する</h2>' ;
	$html .= '<p>動画IDを指定して、コメントを取得してみて下さい。</p>' ;
	$html .= '<form>' ;
	$html .= 	'<p><input name="post_id" value="' . $post_id . '"></p>' ;
	$html .= 	'<p><button>検索する</button></p>' ;
	$html .= '</form>' ;

	// 実行結果の出力
	$html .= '<h2>実行結果</h2>' ;

	// エラー判定
	if( !$obj || !isset($obj->data->records) || empty($obj->data->records) )
	{
		$html .= '<p>データを取得できませんでした…。設定を再確認して下さい。</p>' ;
	}
	else
	{
		// 説明
		$html .= '<p>動画ID:<code><b>' . $post_id . '</b></code>に付いたコメントを取得しました。</p>' ;

		// 解析
		foreach( $obj->data->records as $item )
		{
			// 各データの整理
			$userId = (string)$item->userId ;		// ユーザーID (文字列にキャストしないと末尾の数値が丸まる…)
			$username = $item->username ;		// ユーザー名
			$created = $item->created ;		// 投稿日時
			$commentId = $item->commentId ;		// コメントID
			$comment = $item->comment ;		// コメント

			// 日時の整形
			$created = date( 'Y/m/d H:i' , strtotime( $created ) ) ;

			// ブラウザに出力
			$html .= '<dl>' ;
			$html .= 	'<dt>ユーザーID</dt>' ;
			$html .= 		'<dd><a href="https://vine.co/u/' . $userId . '" target="_blank">' . $userId . '</a></dd>' ;
			$html .= 	'<dt>ユーザー名</dt>' ;
			$html .= 		'<dd>' . $username . '</dd>' ;
			$html .= 	'<dt>投稿日時</dt>' ;
			$html .= 		'<dd>' . $created . '</dd>' ;
			$html .= 	'<dt>コメントID</dt>' ;
			$html .= 		'<dd>' . $commentId . '</dd>' ;
			$html .= 	'<dt>コメント内容</dt>' ;
			$html .= 		'<dd>' . $comment . '</dd>' ;
			$html .= '</dl>' ;
		}
	}

	// 取得したデータ
	$html .= '<h2>取得したデータ</h2>' ;
	$html .= '<p>下記のデータを取得できました。</p>' ;
	$html .= 	'<h3>JSON</h3>' ;
	$html .= 	'<p><textarea rows="8">' . $json . '</textarea></p>' ;
	$html .= 	'<h3>レスポンスヘッダー</h3>' ;
	$html .= 	'<p><textarea rows="8">' . $header . '</textarea></p>' ;

?>

<?php
	// ブラウザに[$html]を出力 (HTMLのヘッダーとフッターを付けましょう)
	echo $html ;
?>

このコードの動作を確認する

お気に入り情報を取得する

動画のID(postId)を指定して、その動画にお気に入りを付けたユーザーの一覧を取得することができます。

エンドポイント

下記URLに、GETメソッドでリクエストを送ります。リクエストには認証が必要です。

GET https://api.vineapp.com/posts/{動画のID}/likes

取得できるJSON

リクエスト成功時に取得できるJSONのサンプルです。recordsの中に、お気に入りを付けたユーザーデータが配列形式で格納されています。

JSON

{"code": "", "data": {"count": 178883, "anchorStr": "1188372183291154432", "records": [{"username": "Rebecca Balderas", "verified": 0, "vanityUrls": [], "followRequested": 0, "created": "2015-03-14T03:37:01.000000", "avatarUrl": "http://v.cdn.vine.co/avatars/default.png", "userId": 1188007057635323904, "location": null, "notifyPosts": 0, "user": {"username": "Rebecca Balderas", "verified": 0, "vanityUrls": [], "avatarUrl": "http://v.cdn.vine.co/avatars/default.png", "userId": 1188007057635323904, "private": 0, "location": null, "description": null}, "following": 0, "postId": 1049109950888337408, "likeId": 1188372183291154432, "blocked": 0}, {"username": "Evan Hodson", "verified": 0, "vanityUrls": [], "followRequested": 0, "created": "2015-03-14T03:46:05.000000", "avatarUrl": "http://v.cdn.vine.co/r/avatars/4C0BC380C41183326705880801280_pic-r-142510123326665bb67fa44.jpg.jpg?versionId=6II9iipb_fejwa88ZG7pPfVdx.5FUT1.", "userId": 1183326691025121280, "location": null, "notifyPosts": 0, "user": {"username": "Evan Hodson", "verified": 0, "vanityUrls": [], "avatarUrl": "http://v.cdn.vine.co/r/avatars/4C0BC380C41183326705880801280_pic-r-142510123326665bb67fa44.jpg.jpg?versionId=6II9iipb_fejwa88ZG7pPfVdx.5FUT1.", "userId": 1183326691025121280, "private": 0, "location": null, "description": null}, "following": 0, "postId": 1049109950888337408, "likeId": 1188374466460258304, "blocked": 0}], "previousPage": null, "anchor": 1188372183291154432, "nextPage": 2, "size": 2}, "success": true, "error": ""}

各プロパティの説明

JSONの主な項目の説明です。ユーザーに関するデータは、「プロフィールを取得する」の章をご参考下さい。

likeId
お気に入りのID。
created
お気に入りを付けた日時。
userId
ユーザーID。
username
ユーザー名。

サンプルプログラム

指定したIDの動画に、お気に入りを付けたユーザーの一覧を取得するサンプルプログラムです。

PHP

<?php

	// 認証キー (必要)
	$auth_key = '' ;

	// 動画IDを指定
	$post_id = '1049109950888337408' ;

	// GETメソッドで指定がある場合
	foreach( array( 'post_id' ) as $val )
	{
		if( isset( $_GET[ $val ] ) && $_GET[ $val ] != '' )
		{
			${ $val } = $_GET[ $val ] ;
		}
	}

	// リクエストURL
	$request_url = 'https://api.vineapp.com/posts/' . $post_id . '/likes' ;

	// BASIC認証のリクエスト
	$curl = curl_init() ;
	curl_setopt( $curl , CURLOPT_URL , $request_url ) ;
	curl_setopt( $curl , CURLOPT_HEADER, 1 ) ;
	if( $auth_key )
	{
		curl_setopt( $curl , CURLOPT_HTTPHEADER , array( 'vine-session-id: ' . $auth_key . "\r\n" ) ) ;
	}
	curl_setopt( $curl , CURLOPT_SSL_VERIFYPEER , false ) ;
	curl_setopt( $curl , CURLOPT_RETURNTRANSFER , true ) ;
	curl_setopt( $curl , CURLOPT_TIMEOUT , 5 ) ;
	$res1 = curl_exec( $curl ) ;
	$res2 = curl_getinfo( $curl ) ;
	curl_close( $curl ) ;

	// 取得したデータ
	$json = substr( $res1, $res2['header_size'] ) ;			// 取得したデータ(JSONなど)
	$header = substr( $res1, 0, $res2['header_size'] ) ;		// レスポンスヘッダー (検証に利用したい場合にどうぞ)

	// HTML用
	$html = '' ;

	// JSONデータをオブジェクト形式に変換する
	$obj = json_decode( $json ) ;

	// キーワードを指定する
	$html .= '<h2>動画IDを指定する</h2>' ;
	$html .= '<p>動画IDを指定して、お気に入りを付けたユーザーを取得してみて下さい。</p>' ;
	$html .= '<form>' ;
	$html .= 	'<p><input name="post_id" value="' . $post_id . '"></p>' ;
	$html .= 	'<p><button>検索する</button></p>' ;
	$html .= '</form>' ;

	// 実行結果の出力
	$html .= '<h2>実行結果</h2>' ;

	// エラー判定
	if( !$obj || !isset($obj->data->records) || empty($obj->data->records) )
	{
		$html .= '<p>データを取得できませんでした…。設定を再確認して下さい。</p>' ;
	}
	else
	{
		// 説明
		$html .= '<p>動画ID:<code><b>' . $post_id . '</b></code>にお気に入りを付けたユーザーを取得しました。</p>' ;

		// 解析
		foreach( $obj->data->records as $item )
		{
			// 各データの整理
			$userId = (string)$item->userId ;		// ユーザーID (文字列にキャストしないと末尾の数値が丸まる…)
			$username = $item->username ;		// ユーザー名
			$created = $item->created ;		// 投稿日時
			$likeId = (string)$item->likeId ;		// お気に入りID (文字列にキャストしないと末尾の数値が丸まる…)

			// 日時の整形
			$created = date( 'Y/m/d H:i' , strtotime( $created ) ) ;

			// ブラウザに出力
			$html .= '<dl>' ;
			$html .= 	'<dt>ユーザーID</dt>' ;
			$html .= 		'<dd><a href="https://vine.co/u/' . $userId . '" target="_blank">' . $userId . '</a></dd>' ;
			$html .= 	'<dt>ユーザー名</dt>' ;
			$html .= 		'<dd>' . $username . '</dd>' ;
			$html .= 	'<dt>投稿日時</dt>' ;
			$html .= 		'<dd>' . $created . '</dd>' ;
			$html .= 	'<dt>お気に入りID</dt>' ;
			$html .= 		'<dd>' . $likeId . '</dd>' ;
			$html .= '</dl>' ;
		}
	}

	// 取得したデータ
	$html .= '<h2>取得したデータ</h2>' ;
	$html .= '<p>下記のデータを取得できました。</p>' ;
	$html .= 	'<h3>JSON</h3>' ;
	$html .= 	'<p><textarea rows="8">' . $json . '</textarea></p>' ;
	$html .= 	'<h3>レスポンスヘッダー</h3>' ;
	$html .= 	'<p><textarea rows="8">' . $header . '</textarea></p>' ;

?>

<?php
	// ブラウザに[$html]を出力 (HTMLのヘッダーとフッターを付けましょう)
	echo $html ;
?>

このコードの動作を確認する

Revineを取得する

今度は動画のID(postId)を指定して、その動画をRevine(再投稿)したユーザーの一覧を取得してみましょう。

エンドポイント

下記URLに、GETメソッドでリクエストを送ります。リクエストには認証が必要です。

GET https://api.vineapp.com/posts/{動画のID}/reposts

取得できるJSON

リクエスト成功時に取得できるJSONのサンプルです。recordsの中に、動画をRevine(再投稿)したユーザーの各データが取得件数分、配列形式で格納されています。

JSON

{"code": "", "data": {"count": 30842, "anchorStr": "1188365116073275392", "records": [{"username": "Linda Senterfitt", "verified": 0, "vanityUrls": [], "followRequested": 0, "created": "2015-03-14T03:30:26.000000", "repostId": 1188370527883071488, "avatarUrl": "http://v.cdn.vine.co/avatars/default.png", "userId": 1023521376340180992, "location": null, "notifyPosts": 0, "user": {"private": 0}, "following": 0, "postId": 1049109950888337408, "blocked": 0}, {"username": "Alicha", "verified": 0, "vanityUrls": [], "followRequested": 0, "created": "2015-03-14T03:08:56.000000", "repostId": 1188365116073275392, "avatarUrl": "http://v.cdn.vine.co/r/avatars/E5F57A4ACB1185290478791348224_339884214e4.1.5.jpg?versionId=2OuX6nj9BO9rozV1Xc9f8X0AyWmGK_fV", "userId": 1178784053919461376, "location": null, "profileBackground": "0x333333", "notifyPosts": 0, "user": {"private": 0}, "following": 0, "postId": 1049109950888337408, "blocked": 0}], "previousPage": null, "anchor": 1188365116073275392, "nextPage": 2, "size": 2}, "success": true, "error": ""}

各プロパティの説明

JSONの主な項目の説明です。ユーザーに関するデータは、「プロフィールを取得する」の章をご参考下さい。

repostId
RevineのID。
created
Revineをした日時。
userId
ユーザーID。
username
ユーザー名。

サンプルプログラム

動画のIDを指定して、その動画をRevineしたユーザーの一覧を取得するサンプルプログラムを紹介します。

PHP

<?php

	// 認証キー (必要)
	$auth_key = '' ;

	// 動画IDを指定
	$post_id = '1049109950888337408' ;

	// GETメソッドで指定がある場合
	foreach( array( 'post_id' ) as $val )
	{
		if( isset( $_GET[ $val ] ) && $_GET[ $val ] != '' )
		{
			${ $val } = $_GET[ $val ] ;
		}
	}

	// リクエストURL
	$request_url = 'https://api.vineapp.com/posts/' . $post_id . '/reposts' ;

	// BASIC認証のリクエスト
	$curl = curl_init() ;
	curl_setopt( $curl , CURLOPT_URL , $request_url ) ;
	curl_setopt( $curl , CURLOPT_HEADER, 1 ) ;
	if( $auth_key )
	{
		curl_setopt( $curl , CURLOPT_HTTPHEADER , array( 'vine-session-id: ' . $auth_key . "\r\n" ) ) ;
	}
	curl_setopt( $curl , CURLOPT_SSL_VERIFYPEER , false ) ;
	curl_setopt( $curl , CURLOPT_RETURNTRANSFER , true ) ;
	curl_setopt( $curl , CURLOPT_TIMEOUT , 5 ) ;
	$res1 = curl_exec( $curl ) ;
	$res2 = curl_getinfo( $curl ) ;
	curl_close( $curl ) ;

	// 取得したデータ
	$json = substr( $res1, $res2['header_size'] ) ;			// 取得したデータ(JSONなど)
	$header = substr( $res1, 0, $res2['header_size'] ) ;		// レスポンスヘッダー (検証に利用したい場合にどうぞ)

	// HTML用
	$html = '' ;

	// JSONデータをオブジェクト形式に変換する
	$obj = json_decode( $json ) ;

	// キーワードを指定する
	$html .= '<h2>動画IDを指定する</h2>' ;
	$html .= '<p>動画IDを指定して、Revineをしたユーザーを取得してみて下さい。</p>' ;
	$html .= '<form>' ;
	$html .= 	'<p><input name="post_id" value="' . $post_id . '"></p>' ;
	$html .= 	'<p><button>検索する</button></p>' ;
	$html .= '</form>' ;

	// 実行結果の出力
	$html .= '<h2>実行結果</h2>' ;

	// エラー判定
	if( !$obj || !isset($obj->data->records) || empty($obj->data->records) )
	{
		$html .= '<p>データを取得できませんでした…。設定を再確認して下さい。</p>' ;
	}
	else
	{
		// 説明
		$html .= '<p>動画ID:<code><b>' . $post_id . '</b></code>をRevineしたユーザーを取得しました。</p>' ;

		// 解析
		foreach( $obj->data->records as $item )
		{
			// 各データの整理
			$userId = (string)$item->userId ;		// ユーザーID (文字列にキャストしないと末尾の数値が丸まる…)
			$username = $item->username ;		// ユーザー名
			$created = $item->created ;		// 投稿日時
			$repostId = (string)$item->repostId ;		// RevineのID (文字列にキャストしないと末尾の数値が丸まる…)

			// 日時の整形
			$created = date( 'Y/m/d H:i' , strtotime( $created ) ) ;

			// ブラウザに出力
			$html .= '<dl>' ;
			$html .= 	'<dt>ユーザーID</dt>' ;
			$html .= 		'<dd><a href="https://vine.co/u/' . $userId . '" target="_blank">' . $userId . '</a></dd>' ;
			$html .= 	'<dt>ユーザー名</dt>' ;
			$html .= 		'<dd>' . $username . '</dd>' ;
			$html .= 	'<dt>投稿日時</dt>' ;
			$html .= 		'<dd>' . $created . '</dd>' ;
			$html .= 	'<dt>RevineのID</dt>' ;
			$html .= 		'<dd>' . $repostId . '</dd>' ;
			$html .= '</dl>' ;
		}
	}

	// 取得したデータ
	$html .= '<h2>取得したデータ</h2>' ;
	$html .= '<p>下記のデータを取得できました。</p>' ;
	$html .= 	'<h3>JSON</h3>' ;
	$html .= 	'<p><textarea rows="8">' . $json . '</textarea></p>' ;
	$html .= 	'<h3>レスポンスヘッダー</h3>' ;
	$html .= 	'<p><textarea rows="8">' . $header . '</textarea></p>' ;

?>

<?php
	// ブラウザに[$html]を出力 (HTMLのヘッダーとフッターを付けましょう)
	echo $html ;
?>

このコードの動作を確認する

ユーザーの操作

様々なエンドポイントにPOST、またはDELETEメソッドでリクエストを送ることで、「お気に入りを付ける」「フォローする」などといった、ユーザーの操作を行なうことができます。全てのリクエストには認証が必要なので、ご注意下さい。

エンドポイント

各エンドポイントにリクエストを送って下さい。

お気に入りを付ける

動画のIDを指定して、その動画にお気に入りを付けます。

POST https://api.vineapp.com/posts/{動画のID}/likes

お気に入りを削除する

動画のIDを指定して、その動画に付けていたお気に入りを削除します。

DELETE https://api.vineapp.com/posts/{動画のID}/likes

Revineをする

動画のIDを指定して、その動画をRevine(再投稿)します。

POST https://api.vineapp.com/posts/{動画のID}/repost

フォローする

ユーザーのIDを指定して、そのユーザーをフォローします。

POST https://api.vineapp.com/users/{ユーザーID}/followers

フォローを解除する

ユーザーのIDを指定して、そのユーザーにしているフォローを解除します。

DELETE https://api.vineapp.com/users/{ユーザーID}/followers

取得できるJSON

リクエスト成功時に取得できるJSONのサンプルです。successプロパティに、成功か失敗かの判定がBoolean値で含まれています。また、dataプロパティの中には、各エンドポイントに対応した、対象となるユーザー、または動画のIDが含まれています。

JSON

{"code": "", "data": {"likeId": 1188381402790846464}, "success": true, "error": ""}

サンプルプログラム

VineのAPIを使ってユーザーを操作するサンプルプログラムです。エンドポイントを調整して、プログラムを起動してみて下さい。

PHP

<?php

	// 認証キー (必要)
	$auth_key = '' ;

	// リクエストメソッド
	$request_method = 'POST' ;

	// リクエストURL
	$request_url = '' ;

	// BASIC認証のリクエスト
	$curl = curl_init() ;
	curl_setopt( $curl , CURLOPT_URL , $request_url ) ;
	curl_setopt( $curl , CURLOPT_CUSTOMREQUEST , $request_method ) ;
	curl_setopt( $curl , CURLOPT_HEADER, 1 ) ; 
	curl_setopt( $curl , CURLOPT_SSL_VERIFYPEER , false ) ;
	curl_setopt( $curl , CURLOPT_RETURNTRANSFER , true ) ;
	curl_setopt( $curl , CURLOPT_HTTPHEADER , array( 'vine-session-id: ' . $auth_key . "\r\n" ) ) ;
	curl_setopt( $curl , CURLOPT_TIMEOUT , 5 ) ;
	$res1 = curl_exec( $curl ) ;
	$res2 = curl_getinfo( $curl ) ;
	curl_close( $curl ) ;

	// 取得したデータ
	$json = substr( $res1, $res2['header_size'] ) ;			// 取得したデータ(JSONなど)
	$header = substr( $res1, 0, $res2['header_size'] ) ;		// レスポンスヘッダー (検証に利用したい場合にどうぞ)

	// HTML用
	$html = '' ;

	// JSONデータをオブジェクト形式に変換する
	$obj = json_decode( $json ) ;

	// 実行結果の出力
	$html .= '<h2>実行結果</h2>' ;

	// エラー判定
	if( !$obj || !isset($obj->success) || !$obj->success )
	{
		$html .= '<p>リクエストに失敗してしまいました…。設定を再度ご確認下さい。</p>' ;
	}
	else
	{
		// 説明
		$html .= '<p>下記がリクエストの結果です。</p>' ;

		// ブラウザに出力
		$html .= '<dl>' ;
		$html .= 	'<dt>成功判定</dt>' ;
		$html .= 		'<dd>' . ( (isset( $obj->success )) ? 'true' : 'false' ) . '</dd>' ;
		$html .= '</dl>' ;
	}

	// 取得したデータ
	$html .= '<h2>取得したデータ</h2>' ;
	$html .= '<p>下記のデータを取得できました。</p>' ;
	$html .= 	'<h3>JSON</h3>' ;
	$html .= 	'<p><textarea rows="8">' . $json . '</textarea></p>' ;
	$html .= 	'<h3>レスポンスヘッダー</h3>' ;
	$html .= 	'<p><textarea rows="8">' . $header . '</textarea></p>' ;

?>

<?php
	// ブラウザに[$html]を出力 (HTMLのヘッダーとフッターを付けましょう)
	echo $html ;
?>

ダウンロード

記事内で紹介したサンプルプログラムを配布しています。プログラミングの下地としてご利用下さい。

ファイル一覧

SYNCER00331
vine-basic-authorization.php Download
get-user.php Download
get-timeline.php Download
search-user.php Download
search-tag.php Download
search-venue.php Download
get-comment.php Download
get-like.php Download
get-revine.php Download
user-action.php Download

ファイル名をクリックすると内容を確認できます。「Download Zip」をクリックするとファイル一式をダウンロードできます。

Download Zip