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が更新されました。 現在、たとえば、タグで写真を受け取るには承認が必要です。 今日、彼らはそれをライブラリに追加しました。



All Articles