Manul Tech

Vineっていうサービス自体知らなかったんだけど、ある案件でVineにアップしている最新動画を引っ張ってきたいと言われたのでやってみた。


Vineって何なの

短い動画をアップするInstagramの動画版みたいなのなんだってね。twitterの人がやってるとかなんとか。SNSからさっぱり離れているので知らなかった。

実はAPIが無かった

この手のサービスには普通にAPIがあるもんだと思ってたけど、Vineには無かった。
でも非公式のAPIはあるんだとか。非公式ってどういうことなの。β版とは違うのか。
よくわかんないけど現時点ではそれだけということらしいので、非公式のAPIを叩く。

どうやんの

やりたいことは、ユーザにアカウント名を入力してもらってそれを元にユーザタイムライン的なデータを引っ張ってきて最新の動画を1件だけ持ってきたいってだけ。


参考にさせてもらった記事を見るに、タイムラインを取得するにはユーザIDが必要とのこと。
じゃあユーザIDはどう引っ張ってくるのか。


非公式APIではOAuthには対応していなくて、BASIC認証。わお。パスワードも入力してもらわなくちゃならないのか。
でも仕組み自体は単純そうだから、ともあれテスト。twitterアカウント連携でテスト用のvineアカウントを作成した。(このテスト用アカウントを作るのが毎度面倒くさい)
そして参考記事のコードを元にユーザIDを取得してみる。
みたんだけど、file_get_contentsだと何やかんやエラーが出て(400 Bad Requestとか)よくわかんなかったから、リクエストはCURLでやることに。

$user_email = '<user@example.com>';
$user_password = '<password>';

$url = 'https://api.vineapp.com/users/authenticate';

$data = array(
	'username' => $user_email,
	'password' => $user_password,
);

$ch = curl_init($url);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($data));
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$res = curl_exec($ch);

ログイン出来ない

はい、出ましたエラー。

That username or password is incorrect.


あるっつの、わざわざテスト用に動画もアップしたっつの。
コードには問題無さそうだから、ツイッター連携ではなくてメアドとパスワードで本家にログインしてみる。

はい、エラー。
Vine

どうやら本当にアカウント無いっぽい。でもTwitterアカウントからはログインできるから、VineのAPIでは連携しているtwitterのメアドとパスワードではログイン出来ないみたい。(当たり前ですか、こっちの間違いですか。)
でもかといって、twitter連携で利用している人はVineのアカウントを作りなおして下さいって言う訳にもいかない。ユーザ設定で何かできるだろってことで、ユーザ設定画面へ。

Vine

あった、メアドとパスワードの入力。
でもクリックするも、反応無し。なんだよ。
じゃあ、iPhoneアプリの方はどうなのよ。

2014-04-25-20.14

ここからできた。
パスワードは「パスワードをリセットする」から。「リセットする」も何も、これから設定するんだけど。

今度こそ

改めて先ほどのコードを試す。
今度はちゃんとユーザデータが返ってきた。

stdClass Object
(
    [code] => 
    [data] => stdClass Object
        (
            [username] => <ユーザ名>
            [edition] => JP
            [userId] => <ユーザID>
            [key] => <ユーザキー>
            [avatarUrl] => <アバターURL>
        )

    [success] => 1
    [error] => 
)

このユーザIDで、一番新しい動画データをもらってくる。

$user_id = '<ユーザID>';

$url = 'https://api.vineapp.com/timelines/users/'.$user_id;

$timeline = file_get_contents($url.'?size=1');
if($timeline){
	$timeline = json_decode($timeline);
}

すると、このようなデータが返ってくる。

stdClass Object
(
    [code] => 
    [data] => stdClass Object
        (
            [count] => 1
            [records] => Array
                (
                    [0] => stdClass Object
                        (
                            [liked] => 0
                            [foursquareVenueId] => 
                            [userId] => 'ユーザID'
                            [private] => 0
                            [likes] => stdClass Object
                                (
                                    [count] => 0
                                    [records] => Array
                                        (
                                        )

                                    [nextPage] => 
                                    [size] => 10
                                    [anchorStr] => 
                                    [previousPage] => 
                                    [anchor] => 
                                )

                            [thumbnailUrl] => '<動画サムネイルURL>'
                            [explicitContent] => 0
                            [myRepostId] => 0
                            [vanityUrls] => Array
                                (
                                )

                            [verified] => 0
                            [avatarUrl] => '<アバターURL>'
                            [comments] => stdClass Object
                                (
                                    [count] => 0
                                    [records] => Array
                                        (
                                        )

                                    [nextPage] => 
                                    [size] => 10
                                    [anchorStr] => 
                                    [previousPage] => 
                                    [anchor] => 
                                )

                            [entities] => Array
                                (
                                )

                            [videoLowURL] => '<低画質動画URL>'
                            [permalinkUrl] => '<動画ページURL>'
                            [username] => '<ユーザ名>'
                            [description] => 
                            [tags] => Array
                                (
                                )

                            [postId] => '<投稿ID>'
                            [videoUrl] => '<動画URL>'
                            [created] => '<作成日>'
                            [shareUrl] => '<動画ページURL>'
                            [profileBackground] => '<ユーザページテーマカラー>'
                            [promoted] => 0
                            [reposts] => stdClass Object
                                (
                                    [count] => 0
                                    [records] => Array
                                        (
                                        )

                                    [nextPage] => 
                                    [size] => 10
                                    [anchorStr] => 
                                    [previousPage] => 
                                    [anchor] => 
                                )

                        )

                )

            [nextPage] => 
            [size] => 1
            [anchorStr] => '<何なのか分かんない>'
            [previousPage] => 
            [anchor] => '<何なのか分かんない>'
        )

    [success] => 1
    [error] => 
)

ようやく動画のURLまで辿り着いた。

オチ

後で気づいたんだけど、VineのWEB版にログインして「View Profile」ページ行くとそのURLの末尾がユーザIDになってた。わお。
何か結果的に遠回りしてさー、取得したんだけどなー、全然これでいいじゃん。
パスワードの入力もしてもらわなくて済むし。
つーことでユーザの皆さん、プロフィールページのURLの末尾を入力するだけでいいでーす。