下記プログラムを書いてみたのですが、うまく動きません。実行するとエラーも表示されず、何が起こっているのか?何が足りないのか?がわからず行き詰まっています。
下記がコードになります。
php
1<?php 2function curl_url($url,$ref="") 3 { 4 if(function_exists("curl_init")) 5 { 6 $ch_init = curl_init(); 7 $user_agent = "Mozilla/4.0 (compatible; MSIE 5.01; "."Windows NT 5.0)"; 8 $ch_init = curl_init(); 9 curl_setopt($ch_init, CURLOPT_USERAGENT, $user_agent); 10 curl_setopt( $ch_init, CURLOPT_HTTPGET, 1 ); 11 curl_setopt( $ch_init, CURLOPT_RETURNTRANSFER, 1 ); 12 curl_setopt( $ch_init, CURLOPT_FOLLOWLOCATION , 1 ); 13 curl_setopt( $ch_init, CURLOPT_FOLLOWLOCATION , 1 ); 14 curl_setopt( $ch_init, CURLOPT_URL, $url ); 15 curl_setopt( $ch_init, CURLOPT_REFERER, $ref ); 16 curl_setopt ($ch_init, CURLOPT_COOKIEJAR, 'cookie.txt'); 17 $html = curl_exec($ch_init); 18 curl_close($ch_init); 19 } 20 else 21 { 22 $hfile = fopen($url,"r"); 23 if($hfile) 24 { 25 while(!feof($hfile)) 26 { 27 $html.=fgets($hfile,1024); 28 } 29 } 30 } 31 return $html; 32 } 33 34$url='http://www.amazon.com/s/ref=sr_nr_p_72_0?rh=n%3A172282%2Ck%3Aiphone+5s%2Cp_72%3A1248879011&keywords=iphone+5s&ie=UTF8&qid=1406078696&rnid=1248877011'; 35$getelement = curl_url($url); 36preg_match_all ("/a[\s]+[^&gt;]*?href[\s]?=[\s\"\']+"."(.*?)[\"\']+.*?&gt;"."([^&lt;]+|.*?)?&lt;\/a&gt;/", $getelement, $matches,PREG_PATTERN_ORDER); 37$matches = $matches[1]; 38$list = array(); 39 foreach($matches as $var) 40 { 41 print_r($var."\n"); 42 } 43 44?>
本来ならpreg_match_allでマッチしたいくつかURLが表示されるはずなのですが、なぜ上記コードだとうまく動かないか、どなかたお分かりになられないでしょうか?
curlの設定はご確認しましたでしょうか?
php -i | grep cURL にて確認できます。
であればhtml取得までは、出来ています。
$response = curl_getinfo( $ch_init );
print_r($response);
で戻りを確認されてはいかがでしょうか?
コメントいただきありがとうございます。cURL support => enabled
cURL Information => 7.43.0という結果が得られました。その上で、$response = curl_getinfo( $ch_init ); print_r($response); を実行してみたところ、以下のエラーが発生しました。「Notice: Undefined variable: ch_init in /Applications/MAMP/htdocs/parser/asin.php on line 2
Warning: curl_getinfo() expects parameter 1 to be resource, null given in /Applications/MAMP/htdocs/parser/asin.php on line 2」
環境の設定自体があやしい感じなのでしょうか?
すみません入れる場所を、お教えしてませんでした。
$response = curl_getinfo( $ch_init );
print_r($response);
は、curl_close($ch_init);の前に置いて実行してください。
再度ありがとうございます。教えて頂いた方法で連想配列の返り値が得られました!「function curl_url」関数の中の処理は概ね理解できたかと思います。preg_match_all 以下の処理がどうなっているのか未だちゃんとイメージできておらず、もう少し研究してみます!
まだ質問が「受付中」になっていますが、いったん「解決済」にされてはいかがでしょうか。
はい。おおよそ仕組みが分かったので「解決済」とさせていただきます。
回答2件
あなたの回答
tips
プレビュー