0

私のアプリケーションには単一のindex.phpがあります

それがする主なことは


1. Facebookログインを使用して、ユーザーが自分のアプリケーションにログインできるようにします。(将来的にはログインなどにグーグルなどの追加サイトを利用します)
2。「主な仕事」 をし
ます3.結果を表示します。

主な作業:
1。fbからアクセストークンを取得します。-10ミリ秒
未満かかります2.データセットを取得します1-アクセストークンを使用して、ユーザーに関するデータを取得します。-約1秒かかります。
3.データセットを取得します2-特定の情報のためにリスト内の各友人をスパイダーします-各友人に約1秒かかります。したがって、平均で約300秒かかります。
4.いくつかの処理を行います-数秒

問題領域1.ステップ3は常にMax_Execution_Timeを超えています。

ソリューションの制約1.phpのみを使用したい。Python/Rubyはありません。

私のコードスケルトンは:

<?php

//  Login
$facebook->getloginurl ......

//Main work
$access_token = $facebook-> ...... 
$user_id = $facebok->get ......

// Following is the time consuming step
foreach $friend_of_that_user .... get information required for this app.

//Displays result
echo ""
?>
4

2 に答える 2

1

あなたは友達ごとに1つのリクエストをしています!これは、次のいずれかの方法で拡張できます。

  1. フィールド拡張
    最初の100人の友人の名前と5本の映画を取得する:

    me?fields=friends.limit(100).fields(name,movies.limit(5).fields(name))
    
  2. バッチAPI
    たとえば、5人の友達の詳細を取得するには、次のバッチリクエストを発行できます。

    curl \
       -F 'access_token=...' \
       -F 'batch=[{ "method":"GET","name":"get-friends","relative_url":"me/friends?limit=5",},{"method":"GET","relative_url":"?ids={result=get-friends:$.data.*.id}"}]' \
       https://graph.facebook.com/
    

limitフィールドをまとめて削除するのではなく、ページネーションを検討することを強くお勧めします。ページ付けがアプリに関連している場合は、エクスペリエンスが大幅に向上する可能性があります。

于 2012-10-18T20:26:52.493 に答える
1

foreachループが問題です。友達ごとに個別のAPI呼び出しを行っています。それは永遠にかかり、必要ありません。その多くのAPI呼び出しでも、アプリはすぐにブロックされます。

ユーザーを認証したら、に電話をかけて、$facebook->api('/me/friends?fields=id,name,picture,...', 'GET');必要なすべてのデータを1回の呼び出しで取得できます。悪い日には、5秒未満かかるはずです。フィールド拡張を使用すると、適切な権限がある限り、友達のデータを深く掘り下げることができます。

非常に多くの友達がいるユーザーがいる場合、Facebookは結果をページングすることがあります。それでも、10回以下のAPI呼び出しで必要なものがすべて揃っているはずです。

于 2012-10-18T20:15:20.123 に答える