InstagramがAPIへのアクセスを許可しなかった場合はどうすればよいですか?

2016年6月1日、Instagram 、モデレートに合格しなかったすべてのアプリケーションをAPIから切断します。 あなたがそれらの中にいる場合はどうですか?

背景


Instagramでスケジュール投稿サービスを作成し、APIを使用してアカウント情報を取得します。 自動モードの電話は、投稿自体に関与しています。 6月1日以降、APIへのアクセスが拒否されたため(モデレーションを2回試行しました)、代替品を見つけることが決定されました。

最初に、公式APIの使用方法を説明します。
  1. アカウントを追加する際、Instagramからアカウント情報(名前、プロフィール写真、投稿数、サブスクライバー、サブスクリプション)を削除します。
  2. 写真/ビデオを公開する前に、投稿数を求めます。公開後も同じことを行います。投稿数が増えた場合、公開が成功したと見なします。
  3. 公開が成功した場合、プロファイルの最後の写真へのリンクを選択します。
  4. ユーザーがサービスから写真を削除した場合、タスクを完了する前に、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']; //      echo $userData['follows']['count'] //    echo $userData['is_private']; //    


アカウント内のすべての投稿を取得する


判明したように、 /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-scraper
Javaでもほぼ同じ: github.com/raiym/instagram-java-scraper
プロジェクトサイト: postaddict.me

更新: simpelに感謝します。 コメントに基づいて、Instagramのリクエストが書き直され、新しいリクエストが追加されました。

更新2(2016年12月2日):この記事の公開後、ライブラリの開発はかなり進んでいます(追加:IDによるユーザー情報の受信、コメントの受信、タグ付け、タグ付け、最高品質の写真の受信、検索など)。リポジトリを見ることをお勧めします。

更新3(2017年3月16日):数日前、Instagramが更新されました。 現在、たとえば、タグで写真を受け取るには承認が必要です。 今日、彼らはそれをライブラリに追加しました。

Source: https://habr.com/ru/post/J302150/


All Articles