【问题标题】:How to do Batch request using the facebook php SDK如何使用 facebook php SDK 进行批量请求
【发布时间】:2015-07-06 21:31:50
【问题描述】:

在我的项目中,我在一张表中有很多事件 ID。 我想遍历这些 id 并向 facebook 请求该特定 id 的附加信息。

现在我为每个 ID 发出不同的 http 请求。我想把它放在一个批次中,这样我就可以传递所有的 id 并在一个 http 请求中接收所有这些事件的所有附加信息。

我使用 Facebook PHP sdk

【问题讨论】:

    标签: php facebook facebook-graph-api batch-file


    【解决方案1】:

    这是一个批量处理两个请求的粗略示例......

    $batch = array();
    
    $req = array(
        'method'       => 'GET',
        'relative_url' => '/me'
    );
    
    $batch[] = json_encode($req);
    
    $req = array(
        'method'       => 'GET',
        'relative_url' => '/me/albums'
    );
    
    $batch[] = json_encode($req);
    
    $params = array(
        'batch' => '[' . implode(',',$batch) . ']'
    );
    try {
        $info = $facebook->api('/','POST',$params);
    } catch(FacebookApiException $e) {
        error_log($e);
        $info = null;
    }
    if(!empty($info)){
        if($info[0]['code'] == '200'){
            $user_profile = json_decode($info[0]['body']);
        }
        if($info[1]['code'] == '200'){
            $user_albums  = json_decode($info[1]['body']);
        }
        echo "<pre>User Profile:\n";
        print_r($user_profile);
        echo "\nAlbums\n";
        print_r($user_albums);
        echo "<pre>";
    }
    

    这是一个粗略的例子,但它应该提供执行批处理请求的基础知识......

    【讨论】:

      【解决方案2】:
      use Facebook\FacebookSession;
      use Facebook\FacebookRequest;
      use Facebook\GraphUser;
      use Facebook\FacebookRequestException;
      
      FacebookSession::setDefaultApplication('YOUR_APP_ID','YOUR_APP_SECRET');
      
      // Use one of the helper classes to get a FacebookSession object.
      //   FacebookRedirectLoginHelper
      //   FacebookCanvasLoginHelper
      //   FacebookJavaScriptLoginHelper
      // or create a FacebookSession with a valid access token:
      $session = new FacebookSession('access-token-here');
      
      try {
      
        $response = (new FacebookRequest($session, 'GET', '/me'))->execute();
      
        $params = [
          [ // call 0 - get current logged in user
            "method"  => "GET",
            "relative_url"  => "me"
          ],
      
          [ // call 1 - get current logged in user's friends
            "method"  => "GET",
            "relative_url"  => "me/friends"
          ],
      
          [ // call 3 - get current logged in user's likes
            "method"  => "GET",
            "relative_url"  => "me/likes"
          ],
      
          [// call 4 - get current logged in user's albums and photos
            "method"  => "GET",
            "relative_url"  => "method/fql.multiquery/?queries=" . json_encode([
              "albums"  => urlencode("SELECT aid, object_id, type, name, visible, owner, cover_pid, cover_object_id, visible, photo_count, video_count FROM album WHERE owner=me()"),
              "album_covers"  => urlencode("SELECT src_big, src_small, images, aid FROM photo WHERE pid IN (SELECT cover_pid FROM #albums)"),
              "photos"  => urlencode("SELECT pid, object_id, owner, src_big, src_small, images, aid FROM photo WHERE aid IN (SELECT aid FROM #albums)")
            ])
          ];
      
      
        $response = (new FacebookRequest($session, 'POST', '?batch='.json_encode($params) ))->execute();
      
        $objects = $response->getGraphObject();
      
        foreach($objects->asArray() as $object){
          $body = json_decode($object->body, 1);
          print_r($body);
          echo "--------------\n";
        }
      
      } catch(FacebookRequestException $e) {
      
        echo "Exception occured, code: " . $e->getCode();
        echo " with message: " . $e->getMessage();
      
      }   
      

      【讨论】:

        【解决方案3】:

        您可以像这样批量处理这些请求:

        curl \
        -F 'access_token=…' \
        -F 'batch=[ \
                {"method": "GET", "relative_url": "me"}, \
                {"method": "GET", "relative_url": "me/friends?limit=50"} \
            ]'\
        https://graph.facebook.com
        

        https://developers.facebook.com/docs/reference/api/batch/

        批量大小限制为 50。

        【讨论】:

        • 我已经查看了文档,但它不适用于 PHP sdk。此示例适用于 2 个单独的查询。我想问这个问题。 $this->facebook->api($id, 'GET', array('fields' => 'name,venue,privacy,location,start_time,end_time,description'));但是对于 50 Id 的一次。不知道批处理请求是否可行。谢谢你的帮助!
        • 那你只需拨打$this-&gt;facebook-&gt;api( $id, 'GET', array( 'fields' =&gt; 'name,venue,privacy,location,start_time,end_time,description', 'ids' =&gt; '[CSV LIST OF USER IDS]' ) );
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多