2015-11-03 67 views
0

nextLink查詢結果對象返回或者設置爲URL的結果作爲一個字符串或空的下一頁,這取決於是否有當前一個又一個頁面。文檔對此非常清楚,但是他們沒有任何關於如何獲取該鏈接併爲下一頁提出另一請求的內容。如何使用結果的nextLink屬性?

我已經挖通源和只發現它看起來好像真的沒有什麼辦法利用這一價值,因爲不是一個布爾告訴我,有更多其他東西。爲了讓這樣一個明顯鬆散的結局,即使在一個測試版API中,聽起來也不像谷歌,所以我必須以某種方式失去一些東西。

我的代碼設置的方式,我不能只重用生成的初始請求的請求數據。我有單獨的邏輯來完成初始請求並將結果集解析爲可用的形式。那並且知道這個鏈接被暴露,就好像它意味着被使用一樣,暗示有一種比修改初始請求更簡潔的方式。只是,我該怎麼做?

+0

我想你可能會專門查看聯繫人API。您不妨試圖蜷縮這個新鏈接,看看您是否得到了結果。最近我正在看這個。我也認爲可能會在對象上調用getNext()。 –

+0

實際上,它是Analytics API。這些代碼在各種不同的服務中應該是通用的,因爲Google_Service_Analytics_DataGa_Resource幾乎可以繼承Google_Service_Resource的所有內容。唯一的功能是'get'(在GA對象上)和'call'(在​​超類上)。 'get'只是爲'call'設置一些參數,然後調用它。 –

回答

0

我有事情,似乎工作。重要的是位於底部,我採取nextLink並使用這些部分來創建一個新的查詢。這並不理想,但它比嘗試手動捲曲的東西更好,因爲網上的所有內容似乎都暗示了這一點。當然,Google_Service_Analytics_GaData將根據正在使用的服務而變化。

do { 
    $rows = $results->getRows(); 

    foreach ($rows as $row) { 
     $record = array(); 

     foreach ($row as $i => $field) { 
      $name = $headers[$i]->name; 

      switch($headers[$i]->dataType) { 
       case 'FLOAT': 
        $record[$name] = (float) $field; 
        break; 
       case 'INTEGER': 
        $record[$name] = (int) $field; 
        break; 
       default: 
        $record[$name] = (string) $field; 
      } 
     } 

     $records[] = $record; 
    }; 

    $nextLink = $results->getNextLink(); 

    if ($nextLink) { 
     /* The GA API doesn't have anything to actually USE The link 
     * they so helpfully supply, so we have to disassemble it and 
     * make a new query off of it. Internally, 
     * $this->gaService->data_ga calls $this->gaService->call. 
     * These are on `Google_Service_Analytics_DataGa_Resource` and 
     * `Google_Service_Resource`, respectively. 
     */ 
     $options = []; 
     parse_str(substr($nextLink, strpos($nextLink, '?') + 1), $options); 

     $results = $this->gaService->data_ga->call('get', [$options], "Google_Service_Analytics_GaData"); 
    } 
} while ($nextLink); 
相關問題