PDA

View Full Version : سوال: نحوه تفکیک URL و محتوا از تتایج جست و جوی گوگل



بیتا حکمت
چهارشنبه 22 بهمن 1393, 16:04 عصر
سلام . کدی که در پایین ملاحضه می کنید نتایج جست و جوی گوگل رو برمی گردونه .



<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<?php
/**
* google_search_api()
* Query Google AJAX Search API
*
* @param array $args URL arguments. For most endpoints only "q" (query) is required.
* @param string $referer Referer to use in the HTTP header (must be valid).
* @param string $endpoint API endpoint. Defaults to 'web' (web search).
* @return object or NULL on failure
*/
function google_search_api($args, $referer = 'http://localhost/test/', $endpoint = 'web'){
$url = "http://ajax.googleapis.com/ajax/services/search/".$endpoint;

if ( !array_key_exists('v', $args) )
$args['v'] = '1.0';

$url .= '?'.http_build_query($args, '', '&');

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
// note that the referer *must* be set
curl_setopt($ch, CURLOPT_REFERER, $referer);
$body = curl_exec($ch);
curl_close($ch);
//decode and return the response
return json_decode($body);
}

$rez = google_search_api(array(
'q' => 'هوش مصنوعی',
));
//results[$x]->url;
print_r($rez);
?>





اما مشکل اینجاست که خروجی به این صورت و نامرتب هست .

http://8pic.ir/images/b0180gtw2lixidviyr1u.jpg (http://8pic.ir/)

سوال اول : چطوری می تونم URL ها و محتویات URL رو به تفکیک چاپ کنم ؟ به عبارتی در کد بالایی چه تغییری لازم هست که URL و محتویات URL به صورت منظم چاب بشن (اگر سوالم گنک به نظر می رسه به خروجی کد دوم در ادامه مطلب دقت کنید )

کد دیگری هم برای بدست آوردن نتایج جست وجوی گوگل وجود داره



<?php
$query = 'Test';
$url = "http://ajax.googleapis.com/ajax/services/search/web?v=1.0&q=".$query;

$body = file_get_contents($url);
$json = json_decode($body);

for($x=0;$x<count($json->responseData->results);$x++){

echo "<b>Result ".($x+1)."</b>";
echo "<br>URL: ";
echo $json->responseData->results[$x]->url;
echo "<br>VisibleURL: ";
echo $json->responseData->results[$x]->visibleUrl;
echo "<br>Title: ";
echo $json->responseData->results[$x]->title;
echo "<br>Content: ";
echo $json->responseData->results[$x]->content;
echo "<br><br>";

}

?>





که خروجی اش به این صورت هست

http://8pic.ir/images/9ydu2q1yqdxnlvm082mb.jpg (http://8pic.ir/)

سوال دوم : چرا کدی که برای روش دوم استفاده شده ، برای کلمات فارسی جواب نمی ده ! وقتی به جای کلمه تست می نویسم " هوش مصنوعی " فقط یه صفحه سفید نشون داده میشه .

سوال آخر : چندان مهم نیست ، اما اگر کسی می دونه که چطوری میشه بیشتر از 4 نتیجه جست و جو رو با کد به دست آورد ممنون میشم . از رفرنس های انگلیسی چیز زیادی متوجه نشدم.

پیشاپیش از توجه و راهنمایی اتون ممنونم

بیتا حکمت
پنج شنبه 23 بهمن 1393, 11:42 صبح
کسی جواب سوالو نمی دونه آیا

martoor
پنج شنبه 23 بهمن 1393, 12:26 عصر
خدمت شما:


<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<?php
function google_search_api($args, $referer = 'http://localhost/test/', $endpoint = 'web'){
$url = "http://ajax.googleapis.com/ajax/services/search/".$endpoint;

if ( !array_key_exists('v', $args) )
$args['v'] = '1.0';

$url .= '?'.http_build_query($args, '', '&');

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
// note that the referer *must* be set
curl_setopt($ch, CURLOPT_REFERER, $referer);
$body = curl_exec($ch);
curl_close($ch);
//decode and return the response
return json_decode($body);
}

$rez = google_search_api(array(
'q' => 'هوش مصنوعی',
));

foreach ($rez->responseData->results as $res){
echo "<pre><a href='" . $res->url . "'>". $res->title ."</a><br>" . $res->content . "</pre>";
}
?>

بیتا حکمت
پنج شنبه 23 بهمن 1393, 18:26 عصر
خدمت شما:


<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<?php
function google_search_api($args, $referer = 'http://localhost/test/', $endpoint = 'web'){
$url = "http://ajax.googleapis.com/ajax/services/search/".$endpoint;

if ( !array_key_exists('v', $args) )
$args['v'] = '1.0';

$url .= '?'.http_build_query($args, '', '&');

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
// note that the referer *must* be set
curl_setopt($ch, CURLOPT_REFERER, $referer);
$body = curl_exec($ch);
curl_close($ch);
//decode and return the response
return json_decode($body);
}

$rez = google_search_api(array(
'q' => 'هوش مصنوعی',
));

foreach ($rez->responseData->results as $res){
echo "<pre><a href='" . $res->url . "'>". $res->title ."</a><br>" . $res->content . "</pre>";
}
?>

ممنونم ، یه سوال دیگه هم داشتم . تو C# میشه به این کد جست و جو تعداد داد ، ایا تو این کد امکانش هست کاری مشابه اون نجام داد . برا واضح تر شدن منظورم کد سی شارپ رو هم اینجا می نویسم . این کد تعداد 64 مورد از نتایج جست و جوی گوگل رو برمی گردونه ، در حالی که تو PHP فقط 4 مورد برگشت داده میشه




GwebSearchClient client = new GwebSearchClient("WWW.blogfa.com");
IList<IWebResult> results = client.Search(" Test ", 50); //
foreach (IWebResult result in results)
{
listBox1.Items.Add(result.VisibleUrl);
}

bagherok
پنج شنبه 23 بهمن 1393, 19:04 عصر
ممنونم ، یه سوال دیگه هم داشتم . تو C#‎‎‎‎‎‎ میشه به این کد جست و جو تعداد داد ، ایا تو این کد امکانش هست کاری مشابه اون نجام داد . برا واضح تر شدن منظورم کد سی شارپ رو هم اینجا می نویسم . این کد تعداد 64 مورد از نتایج جست و جوی گوگل رو برمی گردونه ، در حالی که تو PHP فقط 4 مورد برگشت داده میشه




GwebSearchClient client = new GwebSearchClient("WWW.blogfa.com");
IList<IWebResult> results = client.Search(" Test ", 50); //
foreach (IWebResult result in results)
{
listBox1.Items.Add(result.VisibleUrl);
}


فرقی نمیکنه (ربطی به PHP يآ C#‎ نداره)
درهرصورت 8 تا آخرشه
باید هربار 8 تا 8 تا بخونید

&start=1&rsz=large
&start=9&rsz=large
&start=17&rsz=large

بیتا حکمت
پنج شنبه 23 بهمن 1393, 21:01 عصر
فرقی نمیکنه (ربطی به PHP يآ C#‎‎‎‎‎ نداره)
درهرصورت 8 تا آخرشه
باید هربار 8 تا 8 تا بخونید

&start=1&rsz=large
&start=9&rsz=large
&start=17&rsz=large

گرچه مخالفت با استادان سخته اما بــا تعداد هشت تا موافق نیستم : دی
، یا هم نکته ای هست که من نمی دونم ، اگر سیستم عامل اتون ویندوز هست یک نمونه ساده براتون اپ کنم ، همون کد بالایی که گذاشتم ، می بنید که یکباره
بیشتر از 8 مورد برگشت داده میشه .
اما کار من با هشت تا هشت هم راه می افته ، فقط اگر بفرمایید که چطوری رشته هایی مثل ، &start=17&rsz=large چطوری به URL الحاق کنم ممنون میشم .
من دقیق نمی دونم چطوری از اینا استفاده کنم

bagherok
پنج شنبه 23 بهمن 1393, 21:40 عصر
و حتما نکته ای هست که بنده مطلع نیستم.
-------------------------------------------------------


خب برای
الحاق مثل لینک زیر

http://ajax.googleapis.com/ajax/services/search/web?q=SpongeBob%20Full&v=1.0&start=1&rsz=large




$rez = google_search_api(array( 'q' => 'هوش مصنوعی', 'start'=>1, 'rsz'=>8 ));

بیتا حکمت
پنج شنبه 23 بهمن 1393, 22:36 عصر
و حتما نکته ای هست که بنده مطلع نیستم.
-------------------------------------------------------


خب برای
الحاق
مثل لینک زیر

http://ajax.googleapis.com/ajax/services/search/web?q=SpongeBob%20Full&v=1.0&start=1&rsz=large




$rez = google_search_api(array( 'q' => 'هوش مصنوعی', 'start'=>1, 'rsz'=>8 ));

بازم ممنون ، نمی دونم کدوم قسمت رو اشتبا نوشتم خطا داد



<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<?php
function google_search_api($args, $referer = 'http://localhost/test/', $endpoint = 'web'){
$url = "http://ajax.googleapis.com/ajax/services/search/web?q=SpongeBob%20Full&v=1.0&start=1&rsz=large".$endpoint;

if ( !array_key_exists('v', $args) )
$args['v'] = '1.0';

$url .= '?'.http_build_query($args, '', '&');

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
// note that the referer *must* be set
curl_setopt($ch, CURLOPT_REFERER, $referer);
$body = curl_exec($ch);
curl_close($ch);
//decode and return the response
return json_decode($body);
}

$rez = google_search_api(array( 'q' => 'هوش مصنوعی', 'start'=>1, 'rsz'=>8 ));


foreach ($rez->responseData->results as $res){
echo "<pre><a href='" . $res->url . "'>". $res->title ."</a>" . $res->content . "</pre>";
}
?>





خطا :


Invalid argument supplied for foreach()


ادیتور تو $endpoint; فاصله انداخته اما در اصل بدون فاصله اس . یه بار هم برا تست کد کلا" برش داشتم اما تاثیری نداشت

bagherok
پنج شنبه 23 بهمن 1393, 23:05 عصر
فقط کافیه مقدار clallback رو با مقدار مورد نظر مقدار دهی کنید.
و تعدا خروجی برابر با مقدار clallback ضرب در 8.
یعنی اگه 6=clallback باشه تعداد خروجی برابر با 48 میشه.


<?php
header('Content-Type: text/html; charset=utf-8');
function google_search_api($args,$clallback=1,$referer = 'http://localhost/test/',$endpoint = 'web'){
if ( !array_key_exists('v', $args) )
$args['v'] = '1.0';
for($i=1;$i<=$clallback;$i++) {
$url = "http://ajax.googleapis.com/ajax/services/search/".$endpoint;
$url .= '?'.http_build_query($args, '', '&');
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_REFERER, $referer);
$body = curl_exec($ch);
curl_close($ch);
$rez[]=json_decode($body);
$args['start']+=8;
}
return $rez;
}

$rezs = google_search_api(array('q' => 'هوش مصنوعی','start'=>1,'rsz'=>large),6);
foreach ($rezs as $rez ){
if($rez->responseData!=null){
foreach ($rez->responseData->results as $res){
echo "<pre><a href='" . $res->url . "'>". $res->title ."</a><br/>" . $res->url .'<br/>'. $res->content . "</pre>";
}
}
}
?>