PDA

View Full Version : حرفه ای: curl



shahpari_592000
پنج شنبه 21 دی 1391, 15:33 عصر
سلام
من عضو جدید هستم و یک مشکل در زمینه استفاده از cURL در php داشتم

من باید برنامهای بنویسم که بتونم با کمک curl تشخیص بدم آیا مثلا کلمه ای bold , italic,.... در سایت هست یا نه
اگر باشه true و اگر نباشه false برگردونه

منتظر کمکتون هستم

MostafaEs3
پنج شنبه 21 دی 1391, 16:10 عصر
:متفکر::متفکر::متفکر::متفکر:: تفکر::متفکر::متفکر::متفکر::م فکر::متفکر:

داداش Curl که واسه ارسال و دریافت اطلاعات هست !! از کلاس پردازش Html مثل این استفاده کن :: http://simplehtmldom.sourceforge.net

البته بازهم خیلی وقتا نمیشه چون میان توی Css یا Style میذارن و راهش اینه که اگه توی Style باشه با استفاده از عبارات منظم پردازش رو انجام بدید

shahpari_592000
پنج شنبه 21 دی 1391, 16:38 عصر
ممنون از جوابت اما من در واقع می خوام یکی از الگوریتمهای SEO رو پیاده سازی کنم

MostafaEs3
پنج شنبه 21 دی 1391, 16:45 عصر
آره سئو به همین Bold بودن اطلاعات حساسه - مثلا خود من برای جستجوگر ایران خبر(http://www.irankhabar.net) هیچ راهی به ذهنم نرسید که چطوری بیام ببینم این Bold هست یا نه - پس اومدم تشخیص خودکار پاراگراف های موضوعی گذاشتم . مثلا گفتم اگه یک خطی آخرش نقطه نبود ، دارای حروف فارسی بود و با طول مشخصی بود بصورت Bold دربیاد !

shahpari_592000
پنج شنبه 21 دی 1391, 16:51 عصر
من در ایران زندگی نمیکنم والان هم دوره کارآموزی هستم اینجا اما مشکل من اینه که در واقع اصلا از curl سر در نمی آرم
احنیاج به یک فطعه کد دارم که بتونم فعلا متوجه بشم جه کار باید بکنم
(در ضمن من خانمم)

MostafaEs3
پنج شنبه 21 دی 1391, 16:57 عصر
خب الان شما یعنی میخوای تشخیص بدی که کدوم متن Bold یا Italic هست درسته ؟ آخه مساله اینه که Curl برای ارسال و دریافت اطلاعات توی سرور استفاده میشه - کلا کارش همینه

shahpari_592000
پنج شنبه 21 دی 1391, 17:05 عصر
خوب پس من باید یک سایت رو انتخاب کنم بعد به برنامه بگم بگرده ببینه مثلا کلمه ای bold هست یا نه و بعد جواب رو بهم برگردونه
همین؟

اونوقت چطوری بنویسمش؟
من با php برنامه می نویسم
در ضمن میتونی همون تو بگی

MostafaEs3
پنج شنبه 21 دی 1391, 17:18 عصر
:کف::کف::کف::کف::کف::کف::کف::کف:

من کلا قاطی کردم ! بذار ببینم دوستان کسی نیست جواب بده

shahpari_592000
پنج شنبه 21 دی 1391, 17:27 عصر
منتظرم
راستش خودمم قاطی کردم

dousti_design
پنج شنبه 21 دی 1391, 17:58 عصر
بعد از اینکه توسط curl (http://www.howtogeek.com/howto/programming/php-get-the-contents-of-a-web-page-rss-feed-or-xml-file-into-a-string-variable/) یا fopen (http://php.net/manual/en/function.fopen.php) یا هرتابع دیگری، محتویات صفحه رو توی یه متغیر قرار دادید.
باید با کمک عبارات منظم یا همونregex متن مورد نظر رو بدست بیارید:


function getTextBetweenTags($string, $tagname) {
$pattern = "/<$tagname ?.*>(.*)<\/$tagname>/";
preg_match($pattern, $string, $matches);
return $matches[1];
}

$str = '<b>ss</b>';
$txt = getTextBetweenTags($str, "b");
echo $txt;

مثلا این قطعه کد هرچیزی که داخل تگ b باشه رو برمیگردونه و چاپ میکنه
موفق باشید

shahpari_592000
دوشنبه 25 دی 1391, 15:53 عصر
سلام من این قطعه کد رو با کمک dousti_design نوشتم
میتونید لطفا اون رو غلط گیری کنید
ممنون


<?php
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, "http://www.google.com/search?q=a". $_GET['q']);

curl_setopt($ch, CURLOPT_HEADER, 0);

curl_setopt($ch, CURLOPT_NOBODY, 0);
curl_exec($ch);

curl_close($ch);

class search {
var $bold;


function search (){
$this-> bold();
}

function getTextBetweenTags($string, $tagname) {
$pattern = "/<$tagname ?.*>(.*)<\/$tagname>/";
preg_match($pattern, $string, $matches);
return $matches[1];
}

}

?>

Tarragon
دوشنبه 25 دی 1391, 15:58 عصر
من نمی تونم در مورد کد بهتون کمکی بکنم اما دلیل طرح جمله :

(در ضمن من خانمم) چیه؟
آخه برام خیلی جالب شد!

shahpari_592000
دوشنبه 25 دی 1391, 16:06 عصر
ایشون منو داداش خطاب کردن
همین

dousti_design
دوشنبه 25 دی 1391, 16:54 عصر
میتونید لطفا اون رو غلط گیری کنید
ممنون
دوست عزیز لطفا دقیقا مشخص کنید چه کاری میخاید انجام بدید.

shahpari_592000
دوشنبه 25 دی 1391, 17:08 عصر
مرسی
میخوام یک حرف با رشته رو جستجو کنم که اگر bold باشه بهم نمایش داده بشه
راستش می خواستم که رشته از ورودی خونده بشه اما نمیدونم چطوری

MMSHFE
دوشنبه 25 دی 1391, 20:12 عصر
بعد از گرفتن محتوای صفحه با cURL (که فکر نمیکنم با این قسمتش مشکل داشته باشین)، با کمک تابع زیر، ببینید عبارت موردنظر شما بصورت bold توی محتوا هست یا نه:


<?php
/**
* Check to see the statement is inside the content as a bold string
*
* @param string $statement The statement to seek for
* @param string $content The main content to check for inclusion
*
* @return boolean The result of check
*/
function IsContainedBold($statement, $content) {
$pos = mb_strpos($content, $statement, 0, 'utf-8');
// statement not found at all
if($pos === false) {
return false;
}
// check for <b>...</b> surrounding the statement
// 3 is the length of <b> and 4 is the length of </b>
if($pos >= 3) { // before 4th character, it's not possible to have <b>
$before = mb_substr($content, $pos - 3, 3, 'utf-8');
$after = mb_substr($content, $pos + mb_strlen($statement, 'utf-8'), 4, 'utf-8');
if($before == '<b>' && $after == '</b>') {
return true;
}
}
// check for <strong>...</strong> surrounding the statement
// 6 is the length of <strong> and 7 is the length of </strong>
if($pos >= 6) { // before 7th character, it's not possible to have <b>
$before = mb_substr($content, $pos - 6, 6, 'utf-8');
$after = mb_substr($content, $pos + mb_strlen($statement, 'utf-8'), 7, 'utf-8');
if($before == '<strong>' && $after == '</strong>') {
return true;
}
}
// neither <b>...</b> nor <strong>...</strong> found around the statement
return false;
}
?>

امیدوارم این تابعی که براتون نوشتم، مشکلتون رو برطرف کنه. موفق باشید.

MMSHFE
دوشنبه 25 دی 1391, 20:13 عصر
راستش می خواستم که رشته از ورودی خونده بشه اما نمیدونم چطوری
باید یک فرم HTML بسازین و توی صفحه مقصدش، مقدار تایپ شده توسط کاربر رو بخونید و به تابعی که نوشتم، بدین تا بررسی رو انجام بده.

shahpari_592000
سه شنبه 26 دی 1391, 14:07 عصر
ممنون از لطفتون

shahpari_592000
سه شنبه 26 دی 1391, 14:56 عصر
من فرم رو نوشتم
اما وقتی با $_GET() اون رو می خونم میگه ورودی باید رشته باشه
چرا؟

MMSHFE
سه شنبه 26 دی 1391, 20:29 عصر
دوست گرامی، GET_$ یک آرایه است. باید اینطوری استفاده کنید:

echo $_GET['id'];
موفق باشید.

shahpari_592000
چهارشنبه 27 دی 1391, 11:23 صبح
مشکل من اینه که نمیدونم به جای $content چی باید بذارم
من با curl سایت google رو میخونم اما وقتی میخوام از تابع شما استفاده کنم نمیدونم چطور باید اینکار رو انجام بدم

باید صمیمانه از شما تشکر کنم چون هیج کس به اندازه شما به من کمک نکرد

MMSHFE
چهارشنبه 27 دی 1391, 15:28 عصر
بجای content$ همون محتوایی که با cURL بدست آوردین رو باید بگذارین. مثال:


<?php
$url = 'http://www.google.com';
ch = curl_init($url);
ob_start();
curl_exec($ch);
$data = ob_get_contents();
ob_end_clean();
curl_close($ch);
if(IsContainedBold('Google', $data)) {
echo '<p>Google is found in bold face in ' . $url . '.</p>' . PHP_EOL;
}
?>

shahpari_592000
پنج شنبه 28 دی 1391, 13:09 عصر
برای آخرین بار ممکنه کد من رو که با کمک شماست رو اصلاح کنید ممنونم پیشاپیش


<html>

<body>
<form action="samp.php" method ="GET">
your favorit word: <input type="text" name="word">
<input type="submit" value="ok">
</form>

<?php
/**
* Check to see the statement is inside the content as a bold string
*
* @param string $statement The statement to seek for
* @param string $content The main content to check for inclusion
*
* @return boolean The result of check
*/
echo $_GET['word'];
$url = 'http://www.google.com/search?q=$word';
$ch = curl_init($url);
#ob_start();
curl_exec($ch);
$data = ob_get_contents();
#ob_end_clean();
curl_close($ch);
if(IsContainedBold('Google', $data)) {
echo '<p>Google is found in bold face in ' . $url . '.</p>' . PHP_EOL;
}

/********************************************/
function IsContainedBold($statement, $content) {
$pos = mb_strpos($content, $statement, 0, 'utf-8');
// statement not found at all
if($pos === false) {
return false;
}
// check for <b>...</b> surrounding the statement
// 3 is the length of <b> and 4 is the length of </b>
if($pos >= 3) { // before 4th character, it's not possible to have <b>
$before = mb_substr($content, $pos - 3, 3, 'utf-8');
$after = mb_substr($content, $pos + mb_strlen($statement, 'utf-8'), 4, 'utf-8');
if($before == '<b>' && $after == '</b>') {
return true;
}
}
// check for <strong>...</strong> surrounding the statement
// 6 is the length of <strong> and 7 is the length of </strong>
if($pos >= 6) { // before 7th character, it's not possible to have <b>
$before = mb_substr($content, $pos - 6, 6, 'utf-8');
$after = mb_substr($content, $pos + mb_strlen($statement, 'utf-8'), 7, 'utf-8');
if($before == '<strong>' && $after == '</strong>') {
return true;
}
}
// neither <b>...</b> nor <strong>...</strong> found around the statement
return false;
}



?>

</body>
</html>

MMSHFE
پنج شنبه 28 دی 1391, 18:25 عصر
مشکل این کد اینه که میخواد کلمه رو توی گوگل جستجو کنه و گوگل هم با <b> یا <strong> کلمه رو پررنگ نمیکنه و JS اینکار رو انجام میده. شما دقیقاً بگین میخواین چه کاری انجام بدین تا درمورد نوشتن کدش راهنمایی کنم.

shahpari_592000
جمعه 29 دی 1391, 11:38 صبح
سلام من دقیقا می خواستم یک عبارت یا کلمه را که در سایت یافت شده bold , italic,... هست رو پیدا کنه
خیلی به من لطف دارین

shahpari_592000
پنج شنبه 05 بهمن 1391, 11:51 صبح
سلام
چرا آخه کسی جواب منو نمیده
من یک برنامه میخوام که اینکارا رو انجام بده
زمانم خیلی کمه
1) Invoke Controller with URL + Keyword as input. Scan test folder to see which tests are available or invoke individual tests.
2) For each URL, fetch the URL with curl and keep the Content
3) Execute each test with input URL, Keyword, Content
4) Store result of test