PDA

View Full Version : سوال: موتور جستجوی meta



kaveh0918
دوشنبه 29 آبان 1391, 20:36 عصر
سلام
دوستان من دنبال اسکریپتی هستم که بشه باهاش یه موتور جستجوی ساخت که نتایج گوگل، یاهو، بینگ رو در هم ترکیب کنه و نمایش بده. همچنین بتونه تصاویر رو هم جستجو کنه. دقیقا مثل این سایت ( http://www.info.com ) دوستان کسی سراغ داره معرفی کنه ممنون میشم.

mrgraphy
سه شنبه 30 آبان 1391, 00:06 صبح
سلام دوست عزیز.
بعید بدونم همچین چیزی که میخوایید رو پیدا کنید.
موتور های جستجو فقط با زبان های تحت وب نیستند بلکه از هوش مصنوعی هم در اون ها استفاده شده ودر ضمن موتور های جستجو دائما در حال تغییر الگوریتم های خودشون هستند و پشیبانی چنین سیستمی خیلی سخته.
موفق باشید.

kaveh0918
سه شنبه 30 آبان 1391, 13:50 عصر
دوست عزیز
فکر کنم شما نظریه بنده رو کامل در نیافتید، من الان خودم یه موتور جستجو را ساختم که از فید RSS نتایج Bing استفاده می کنه و قادر است تمام وب را جستجو کنه ولی چون نتونستم ادرس فید RSS ی که یاهو و گوگل نتایجشون رو نشون میدن پیدا کنم فقط به بینگ محدود شده و همچنین نمی تونه تصاویر رو جستجو کنه.
بله! ساخت و پشتیبانی موتور جستجو در کل کار فوق پیشرفته ای هست ولی کار نشد نداره، در ضمن تو اینی که من ساختم فقط php استفاده شده. حالا باز اگه کسی هر مطلبی داشت که فکر می کنه کمک می کنه ممنون میشم بگه...

mrgraphy
چهارشنبه 01 آذر 1391, 00:37 صبح
اگر از php استفاده کردید خب با curl و فرستادن query خای سرچ به سمت گوگل و دریافت صفحه نتایج و فیلتر گذاشتن روی اون با reqular expresion شدنی هستش.
واسه یاهو هم همین کار رو میتونید بکنید.

kaveh0918
چهارشنبه 01 آذر 1391, 02:28 صبح
من یه صفحه زیر رو در php درست کردم که با cUrl که وقتی بهش مقدار q رو میدی q رو جستجو می کنه تو گوگل ولی هرچی با ... ور رفتم نشد که نشد قسمت هایی از صفحه رو فیلتر کرد ...

<?php

// create a new cURL resource
$ch = curl_init();

// set URL and other appropriate options
curl_setopt($ch, CURLOPT_URL, "http://www.google.com/search?q=". $_GET[q]);
curl_setopt($ch, CURLOPT_HEADER, 0);

// grab URL and pass it to the browser
curl_exec($ch);

// close cURL resource, and free up system resources
curl_close($ch);
?>

اگه میشه یه مثال بزنم واسم چطوری یه بخش از صفحه رو فیلتر کنم؟

mrgraphy
چهارشنبه 01 آذر 1391, 12:25 عصر
دوست عزیز برای فیلتر کردن میشه از jquery هم اس تفاده کرد و گفت که اون div ها و قسمت هایی رو که نمیخوایییم remove کنه اما درست نیست و باعث سنگین شدن میشه. بهترین روش استفاده از preg_replace در php هست که البته برای این صفحه هم یه مقدار باید سنگین regx نوشته بشه.
php regular expresion (http://weblogtoolscollection.com/regex/regex.php)
این کد های curl کامل تر هستند.



function queryToUrl($query, $start=null, $perPage=100, $country="US") {
return "http://www.google.com/search?" . $this->_helpers->url->buildQuery(array(
// Query
"q" => urlencode($query),
// Country (geolocation presumably)
"gl" => $country,
// Start offset
"start" => $start,
// Number of result to a page
"num" => $perPage
), true);
}

// Find first 100 result for "pizza" in Canada
$ch = curl_init(queryToUrl("pizza", 0, 100, "CA"));
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
curl_setopt($ch, CURLOPT_USERAGENT, $this->getUserAgent(/*$proxyIp*/));
curl_setopt($ch, CURLOPT_MAXREDIRS, 4);
curl_setopt($ch, CURLOPT_TIMEOUT, 5);
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 5);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);

$response = curl_exec($ch);

kaveh0918
چهارشنبه 01 آذر 1391, 13:57 عصر
دوست عزیز کد cUrl ی که دادین که کار نکرد!
من دقیقا متوجه نشدم چطوری باید با preg_replace فیلتر کنم! یه مثال عملی بزن اگه ممکنه! مثلا:
ببین فرض کن ما می خوایم از صفحه سایت خودمون که فرض می گیریم http://mysite.com/index.php باشه می خوایم به صفحه اصلی متور جستجو http://search.com/index.php متصل شیم و یه قسمت از صفحه اش رو فیلتر کنیم.

خب حالا اگه http://search.com/index.php برابر کد زیر باشه:


<html><head><meta http-equiv="Content-Type" content="text/html; charset=utf-8" /><title>Search</title></head><body>
<div class="header">text-header</div>
<div class="body">text-body</div>
<div class="footer">text-footer</div>
</body></html>


و می خوایم توی خروجی http://mysite.com/index.php فقط div که کلاس body داره نشون داده شه. اینطوری:


<div class="body">text-body</div>

خب حالا اگه میشه دقیقا بنویس که اسکریپت php که باید داخل http://mysite.com/index.php بگذارم چیه؟؟
ببخش طولانی شد خواستم دقیقا متوجه شی. پیشاپیش مرسی.

mrgraphy
چهارشنبه 01 آذر 1391, 19:35 عصر
نشد دیگه!!
شما باید reqular expresion بلد باشی تا بتونی باهاش کارکنی و گرنه هیچ جوره راه نداره.
ببین این یک مثال از regular expresion در php هستش.


function get_tag( $attr, $value, $xml, $tag=null ) {
if( is_null($tag) )
$tag = '\w+';
else
$tag = preg_quote($tag);

$attr = preg_quote($attr);
$value = preg_quote($value);

$tag_regex = "/<(".$tag.")[^>]*$attr\s*=\s*".
"(['\"])$value\\2[^>]*>(.*?)<\/\\1>/"

preg_match_all($tag_regex,
$xml,
$matches,
PREG_PATTERN_ORDER);

return $matches[3];
}

kaveh0918
پنج شنبه 02 آذر 1391, 02:50 صبح
ببین داداش من به اینجا رسیدم
ولی نمی دونم چطور می تونم محتویات صفحه رو با curl به صورت یه تابع دربیارم؟
من می خوام با preg_replace در صفحه تغییرات ایجاد کنم ولی نمی تونم.
کدی که من دارم اینه ولی کار نمی کنه.


<?php

// create a new cURL resource
$ch = curl_init();

// set URL and other appropriate options
curl_setopt($ch, CURLOPT_URL, "http://google.com/search?q=". $_GET[q]);
curl_setopt($ch, CURLOPT_HEADER, false);
$nnn = curl_exec($ch);

$patterns = array();
$patterns[0] = '/google/';
$replacements = array();
$replacements[0] = '222';
echo preg_replace($patterns, $replacements, $nnn);

// grab URL and pass it to the browser
curl_exec($ch);

// close cURL resource, and free up system resources
curl_close($ch);

?>


طبق این باید هر وقت مقدار q رو به صفحه بفرستم در گوگل سرچ کنه و تمام کلمات "google" رو به "222" تبدیل کنه ولی نمیشه باید چه تغییراتی بدم که کار کنه؟

mrgraphy
پنج شنبه 02 آذر 1391, 17:59 عصر
کد curl شما اشتباهات زیادی داره.
اول اینکه متد ارسال دیتا رو ست نکردید. متد باید get باشه.
دوم چرا دوبار execute میکنید
سوم چند تا پارامتر تو نذاشتید مثلا یکیش return_transfer هست که میشه این

curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
چهارم قبل از execute خروجی گرفتید و این مشکله.
پنجم این regx که نوشتید مشکل syntax داره و غلطه.
باز اگر کمکی از دست من بر میاد بگید.
موفق باشید

kaveh0918
شنبه 04 آذر 1391, 01:20 صبح
دمت گرم مشکلش حل شد
regular expression فوق العاده سخته.
فقط بهم اینو بگو من چطور می تونم یه چیزی مثل این


<title>Untitled 1 ?!$@ 23kk</title>


یعنی انواع کراکتر توی تگ title باشه رو کلاس نویسی کنم؟
دقیق تر این که چطوری بهش بگم <title> تا <title/> رو با هر چی توشه انتخاب کن؟