2015-10-16 55 views
0

我通過捲曲API請求中提取數據概述如下:PHP API要求加減

<?php 

$username = "xxxxyyyyxxxxyyyy"; 
$password = "xxxxyyyyxxxxyyyyxxxxyyyyxxxxyyyy"; 
$remote_url = 'https://xxxxxxxxx.com/orders.json'; 

for ($pages = 0; $pages <= 1420; $pages++) 

{ 
$headers = array(); 
$headers[] = "Authorization: Basic " . base64_encode("$username:$password"); 
$headers[] = "X-Page:" . $pages; 

$opts = array(
    'http'=>array(
    'method'=>"GET", 
    'header' => $headers 
) 
); 

$context = stream_context_create($opts); 

$file1 = file_get_contents($remote_url, false, $context); 

echo "<br><br>Starting page number $pages pull..."; 

$data = json_decode($file1, true); 

foreach($data as $innerArray) { 

/******** WRITE DATA TO DATABASE ********/ 

的問題是,有超過1400頁,這使得該過程非常緩慢。有沒有辦法讓這個過程更快,例如將1,400頁分成可以同時運行的查詢塊?

感謝,

馬特

+0

你可以在命令行上使用wget或curl嗎?只是爲了獲得數據?您還應該檢查使用切片機()的瓶頸位置。 – user2182349

回答

0

加速度是要在兩個遠程請求類型實現 - 冰壺遠程服務器和查詢數據庫。

關於cURL,除非您有不同的方式從遠程服務器獲取頁面,否則您必須一次接收每個頁面,就像您提供的解決方案一樣。這是非常低效的,因爲獲取每個頁面需要打開一個新的流並等待答案。如果您可以啓動單個cURL來獲取所有頁面,速度會更快。

關於插入到數據庫,一次查詢每頁的效率非常低。如果您可以使用單個查詢插入所有頁面,速度會更快。

針對多個值的單個插入方法因數據庫而異,可能難以實現,特別是在處理MySql時。但這是另一個線程的問題。