2017-11-20 14 views
-1

を訪問した:はFacebookのURLの株式はリターンを数えるHTTPの取得/ 1.1 403を頻繁に禁断の私は、各ウェブサイトのサブページのFacebookの株式数を取得するために、次のコードを使用して、私のPHPサイトの一つ上のサイト

$json_string = file_get_contents('http://graph.facebook.com/?id=' . $url); 
$json = json_decode($json_string, true); 
if(isset($json['share']['share_count'])){ 
    return intval($json['share']['share_count']); 
} else { 
    return 0; 
} 

コードは罰金に動作しますあまり関与していないウェブサイト。 しかし、私は頻繁に訪問したサイトでそのコードを使用する場合、それは私にゼロ株式数と次の警告提供します:

警告:警告(2):のfile_get_contentsは(http://graph.facebook.com/?id=..。):ストリームをオープンに失敗しました:HTTPリクエストが失敗しました! HTTP/1.1 403 Forbidden

http://graph.facebook.com/?id= URLへの多くのリクエストを呼び出すと思います。私の質問は、この問題をどうやって解決するのだろうか?私は、各サブページについて10-15分間隔以上で株式数を更新する必要があります。そして2000以上のものがあります。そして、ウェブサイト全体を訪問しているユーザーは膨大な数になります。

+0

[自分のドキュメント](https://developers.facebook.com/docs/graph-api/advanced/rate-limiting)によると、[Appsダッシュボード](https:// developers)を確認できるはずです。 facebook.com/apps/)にアクセスして、あなたがAPIによってレート制限されているかどうかを確認してください。 –

+0

私はdevelopers.facebook.comに登録してAPP IDを取得しましたが、上記のコードを使用しています。もっと何かを使うべきですか? –

答えて

0

あなたは本当に1ページのヒットごとにAPIを呼び出すべきではありません。それは間違いなくレート制限を超えます。 2つの物事はあなたが行う必要がありますあります

  • アプリケーションを作成し、すべてのAPI呼び出しにアプリのアクセストークンを使用します。http://www.devils-heaven.com/facebook-access-tokens/
  • キャッシュAPIの結果のみcronジョブとたまにそれを更新します - または最後の結果が特定の時間範囲よりも古い場合は、ページ上のがヒットします。シェアを最新の状態に保つ必要がある場合は、これがより良い解決策になります。 2000年のAPI呼び出しのcronジョブも、APIの制限に確実に当てはまるでしょう。短時間ですべてのAPI呼び出しを使用しないようにし、API呼び出しのバッチ間でタイムアウトを実装してください。

これが機能しない場合は、API呼び出しの量を減らす必要があります。

+0

はい、DBに結果をキャッシュし、10分の時間範囲を使用しました。しかし、それはまだ多くの呼び出しを生成しました。とにかく私はあなたの提案に従った - 私はアプリを作成し、アプリIDとアプリの秘密を得て、私は私のアクセストークン(app_ID | app_secret)を得た。今私はgraph.facebook.com/?id={url}&access_token={access_token}&fie lds =エンゲージメントを照会しますが、エラーが返されます:ストリームを開くことに失敗しました:HTTPリクエストが失敗しました! HTTP/1.1 400不正リクエスト。ブラウザで同じURLを起動すると、必要なデータが表示され、表示されるので、奇妙です。なぜ私はそのようなエラーを得るか考えていますか? –

+0

問題を解決しました... file_get_contents()のURLに&の代わりに&を使用している必要があります。 –

+0

もちろん、URLをurlencodeする必要があります。 – luschn

関連する問題