2016年6月1日、Instagram
は 、モデレートに合格しなかったすべてのアプリケーションをAPIから
切断します。 あなたがそれらの中にいる場合はどうですか?
背景
Instagramでスケジュール投稿サービスを作成し、APIを使用してアカウント情報を取得します。 自動モードの電話は、投稿自体に関与しています。 6月1日以降、APIへのアクセスが拒否されたため(モデレーションを2回試行しました)、代替品を見つけることが決定されました。
最初に、公式APIの使用方法を説明します。
- アカウントを追加する際、Instagramからアカウント情報(名前、プロフィール写真、投稿数、サブスクライバー、サブスクリプション)を削除します。
- 写真/ビデオを公開する前に、投稿数を求めます。公開後も同じことを行います。投稿数が増えた場合、公開が成功したと見なします。
- 公開が成功した場合、プロファイルの最後の写真へのリンクを選択します。
- ユーザーがサービスから写真を削除した場合、タスクを完了する前に、Instagramにそのような投稿が存在する(または削除された)かどうかを確認する必要があります。
実装
Instagramには
Webバージョンがあります。 これを使用すると
、プライベートアカウントで、投稿数、購読数、購読者数に関する情報を取得できます。また
、公開されている投稿自体、コメント、いいね! したがって、準備が容易なため、同様のライブラリがすでに作成されていると思いました。 googleに行き、
NodeJSのみを見つけました。 また、
PHPにはいくつかのコードがありましたが、4つのポイントすべてに対応していませんでした。 結局、自分のライブラリを書くことにしました。
GitHubでコードを見ることができるので、詳細には触れません。 キーポイントのみを説明します。
アカウント情報の取得
プロファイル(たとえば、
instagram.com/kevin )に移動してページのソースコードを見ると、下にスクロールすると、アカウントに関する情報を含むJSONページに直接接続されたオブジェクトが表示されます。
非常に単純に引き出して(便宜上、
mashape / unirest-phpを使用し
ました )、parsimで配列に書き込みます。
$response = Request::get('https://instagram.com/kevin'); $pageString = $response->body(); $arr = explode('window._sharedData = ', $pageString); $json = explode(';</script>', $arr[1]); $userArray = json_decode($json[0], true); $userData = $userArray['entry_data']['ProfilePage'][0]['user']; echo $userData['username'];
アカウント内のすべての投稿を取得する
判明したように、
/media
アカウントのURLに
https://instagram.com/kevin/media
追加することで、最後の20の投稿の完成したJSONを取得でき
https://instagram.com/kevin/media
しかし、すべての投稿が必要な場合はどうでしょうか? すべての投稿がなくなるまで、ループ内の20の最後の投稿の
id
max_id
パラメーターを追加するだけで十分です:
https://instagram.com/kevin/media?max_id=id
:
max_id
id
便宜上、値
true
または
false
をとる
more_available
フィールドもあり
false
。
シングルポスト情報
Instagramの投稿(
www.instagram.com/p/9BDXa_L7bmなど )へのリンクがあり、その情報を取得したい場合はどうしますか? プロファイルページと同じように、JSONには投稿に関するデータが縫い付けられています。
最初の段落と同じ:引き出して、簡潔に、そしてブーム、私たちは投稿についての情報を持っています。
ボーナス Instagramの写真を最高品質で取得する方法は?
現時点での最高のInstagram写真品質は
1080
ピクセルです。 しかし、このソリューションでは
640
しか提供していません。
pokeメソッドを使用して、たとえばURLの写真を置き換えると、
https://scontent.cdninstagram.com/t51.2885-15/s640x640/sh0.08/e35/12950481_1753078061593396_874826488_n.jpg
640x640
から
640x640
までの
1080x1080
:
https://scontent.cdninstagram.com/t51.2885-15/s1080x1080/sh0.08/e35/12950481_1753078061593396_874826488_n.jpg
次に、可能な限り最高の品質で写真を取得します。
おわりに
私たちの場合、ライブラリの助けを借りて、InstagramからのAPI要件を完全にブロックすることができました。
リポジトリ:
github.com/raiym/instagram-php-scraperJavaでもほぼ同じ:
github.com/raiym/instagram-java-scraperプロジェクトサイト:
postaddict.me更新: simpelに感謝します。 コメントに基づいて、Instagramのリクエストが書き直され、新しいリクエストが追加されました。
更新2(2016年12月2日):この記事の公開後、ライブラリの開発はかなり進んでいます(追加:IDによるユーザー情報の受信、コメントの受信、タグ付け、タグ付け、最高品質の写真の受信、検索など)。リポジトリを見ることをお勧めします。
更新3(2017年3月16日):数日前、Instagramが更新されました。 現在、たとえば、タグで写真を受け取るには承認が必要です。 今日、彼らはそれをライブラリに追加しました。