הוסטס - פורום אחסון האתרים הגדול בישראל

הוסטס - פורום אחסון האתרים הגדול בישראל (https://hosts.co.il/forums/index.php)
-   פורום תיכנות (https://hosts.co.il/forums/forumdisplay.php?f=14)
-   -   קבלת מספר התוצאות בגוגל ב PHP (https://hosts.co.il/forums/showthread.php?t=82269)

hi_sorie 14-05-10 12:27

ציטוט:

נכתב במקור על ידי Baku (פרסם 764035)
מה פתאום ניצן.
זה שקר! זה צריך לקחת 3 שעות..

תקרא מה כתבתי, לכתוב מחלקה משלך - כמו שאתה הצעת לטיפול במידע שמתקבל בעזרת API יקח לך הרבה זמן, גם אם אתה מתכנת מנוסה.

לגבי ניצן,
השיטה שלך נכונה, וכתבתי את זה מלמעלה אבל גם שלי, ולי לקח דקה וחצי :)

PHP קוד:

<?
$init 
file_get_contents("http://www.google.co.il/search?hl=iw&source=hp&ie=windows-1255&q=".$_GET["query"]."&meta=");
preg_match_all("/(<b.*>)(\w.*)(<\/b>)/isxmU"$init $arrayPREG_SET_ORDER);
print(
$array[4][2]); 
?>

הנה לך קוד לבדיקה : http://194.90.34.35/zzz.php?query=blabla
פלט : 12,400,000
פלט של גוגל : http://www.google.co.il/#hl=iw&q=bla...d74c05f45ef504

אותו דבר.

אצלי 3 שורות - אפשר לצמצם ל 2 ;)

נראה לי ששלי יותר קל אפילו למתכנת מתחיל, את הקוד הזה כולם יכולים לכתוב, פחות זמן, פחות שטויות והכתובת של האתר לא תשנה.

Erez | TrustMedia.co.il 14-05-10 12:35

ציטוט:

נכתב במקור על ידי hi_sorie (פרסם 764049)
תקרא מה כתבתי, לכתוב מחלקה משלך - כמו שאתה הצעת לטיפול במידע שמתקבל בעזרת API יקח לך הרבה זמן, גם אם אתה מתכנת מנוסה.

לגבי ניצן,
השיטה שלך נכונה, וכתבתי את זה מלמעלה אבל גם שלי, ולי לקח דקה וחצי :)

PHP קוד:

<?
$init 
file_get_contents("http://www.google.co.il/search?hl=iw&source=hp&ie=windows-1255&q=".$_GET["query"]."&meta=");
preg_match_all("/(<b.*>)(\w.*)(<\/b>)/isxmU"$init $arrayPREG_SET_ORDER);
print(
$array[4][2]); 
?>

הנה לך קוד לבדיקה : http://194.90.34.35/zzz.php?query=blabla
פלט : 12,400,000
פלט של גוגל : http://www.google.co.il/#hl=iw&q=bla...d74c05f45ef504

אותו דבר.

אצלי 3 שורות - אפשר לצמצם ל 2 ;)

נראה לי ששלי יותר קל אפילו למתכנת מתחיל, את הקוד הזה כולם יכולים לכתוב, פחות זמן, פחות שטויות והכתובת של האתר לא תשנה.

וכל פעם שגוגל יוסיפו עוד תגית B לתוצאות חיפוש תשנה את הקוד שלך,לעומת זאת הAPI לא משתנה,אלא רק מוסיפים לו דברים אבל הדברים הישנים ישארו כך שאתה לא צריך לעשות שינוי כל כמה זמן

hi_sorie 14-05-10 12:39

ציטוט:

נכתב במקור על ידי WiPi (פרסם 764052)

וכל פעם שגוגל יוסיפו עוד תגית B לתוצאות חיפוש תשנה את הקוד שלך,לעומת זאת הAPI לא משתנה,אלא רק מוסיפים לו דברים אבל הדברים הישנים ישארו כך שאתה לא צריך לעשות שינוי כל כמה זמן

אם לא שמת לב זה לא קשור לתוצאות חיפוש זה ב headers של העמוד, התוצאות למטה וכרגע הנתון הוא ססטטי מבחינת מיקום.

אפשר גם ללכת לפי התגית הספציפית [ resultStats ], אבל אין לי כח לשבת פה להוכיח דברים, הוכחתי מספיק.

חוץ מזה שגם כתובות של API משתנות, במיוחד אצל גוגל, כמו הכתובת שנתנה את ה PR של העמוד, גם עשו את זה במיוחד למפתחים ושינו את הכתובת.

על אותו עיקרון.

בכל מראה resultStats זה ה ID איפה שמופיע התוצאות לא נראה לי סביר שזה השתנה.

Shay Ben Moshe 14-05-10 12:59

חי, אולי תודה בזה שהשיטה היותר טובה היא של ניצן.
מה גם שבשימוש בfile_get_contents ולא בcurl אפשר לעשות את זה גם בשורה אחת:
PHP קוד:

echo json_decode(file_get_contents('http://ajax.googleapis.com/ajax/services/search/web?v=1.0&q='.urlencode($_GET["query"])))->responseData->cursor->estimatedResultCount

השיטה הזו (ושל ניצן) יותר עמידה, אתה יכול להמשיך ולהתווכח אבל זה המצב.

ביצעתי גם השוואת מהירות. הרצתי את הקודים בלופ (for, מi = 0 עד 10 אמנם יחסית מעט פעמים אך ביצעתי את הבדיקות מספר פעמים עד שראיתי שהתוצאות עקביות), התוצאות לא מפתיעות.

השיטה של ניצן (משתמשת בCURL) לוקחת עם איזור 2.1117317676544 שניות.
השיטה שלי, שהיא השיטה של ניצן רק בלי CURL ב3.0002479553223 שניות.
השיטה שלך חי שמשתמש בביטוים רגולרים ב5.6993758678436 שניות.

השיטה שלך יותר איטית, פחות עמידה לשינויים, לא יותר קצרה ופשוט לא.

IgalSt 14-05-10 16:54

ציטוט:

נכתב במקור על ידי Shay Falador (פרסם 764057)
חי, אולי תודה בזה שהשיטה היותר טובה היא של ניצן.
מה גם שבשימוש בfile_get_contents ולא בcurl אפשר לעשות את זה גם בשורה אחת:
PHP קוד:

echo json_decode(file_get_contents('http://ajax.googleapis.com/ajax/services/search/web?v=1.0&q='.urlencode($_GET["query"])))->responseData->cursor->estimatedResultCount

השיטה הזו (ושל ניצן) יותר עמידה, אתה יכול להמשיך ולהתווכח אבל זה המצב.

ביצעתי גם השוואת מהירות. הרצתי את הקודים בלופ (for, מi = 0 עד 10 אמנם יחסית מעט פעמים אך ביצעתי את הבדיקות מספר פעמים עד שראיתי שהתוצאות עקביות), התוצאות לא מפתיעות.

השיטה של ניצן (משתמשת בCURL) לוקחת עם איזור 2.1117317676544 שניות.
השיטה שלי, שהיא השיטה של ניצן רק בלי CURL ב3.0002479553223 שניות.
השיטה שלך חי שמשתמש בביטוים רגולרים ב5.6993758678436 שניות.

השיטה שלך יותר איטית, פחות עמידה לשינויים, לא יותר קצרה ופשוט לא.

קודם כל Like


לא תארתי לעצמי שהדיון הזה יגיע לוויכוח כזה.

אני לא מאמין שאפשר לשכנע מתכנת אחד שהשיטה של המתכנת השני יותר טובה. גם אם יש עובדות בשטח.
בסופו של דבר, כתיבת קוד היא קצת כמו אומנות וכל אחד יש לו את מה שהוא אוהב יותר או פחות ואת הכיוונים שלו.

לדעתי אם יש כלי שפיתחו במיוחד עבור המטרות שלך, עדיף להשתמש בו.

Shay Ben Moshe 14-05-10 16:59

יגאל, תודה על הLike חח

אני חושב שדווקא טוב שמופיעים דיונים כאלה בהוסטס, למרות שחלק מהתגובות של חי עיצבנו אותי אני שמח שהוא כתב אותן כי בסופו של דבר כולנו רק לומדים מזה.
אבל בכל זאת, תמיד יש דרך יותר טובה לעשות משהו, לא בהכרח שהדרכים שלי ושל ניצן הכי טובות אבל יש דברים שכדאי לעשות אותם אחרת..

IgalSt 14-05-10 17:16

אני מסכים איתך לחלוטין.
כבר כתבתי באחת התגובות הראשונות שלי בדיון הזה שבסופו של דבר כולם פה כדי ללמוד (ו/או לקדם את העסקים שלהם).
בכל אופן, אני תמיד שמח ללמוד דרכים ושיטות חדשות.
אני מפתח ASP ולא PHP, כך שאני לא יודע לגבי השיטה שלך או של ניצן.
בכל אופן, יישמתי משהו דומה ב-ASP וזה עבד מעולה לצרכים שלי.
במיוחד שהייתי צריך לפנות ל-API של ויקיפדיה אחרי שאני מקבל תוצאות מה-API של גוגל, אז היה חשוב לי שהקוד יהיה יעיל במידה מסויימת כי זה היה סקריפט שרץ על הרבה בקשות בהפרשים קצרים והיה צריך להיות מהיר יחסית :)

בכל אופן, אני באמת שמח על הדיון הזה ואני מאמין שהוא תרם רבות לכולם (לפחות לאלה שהיו פתוחים מספיק כדי ללמוד). רק חבל שיש כאלה שמאמינים שהדיון הבריא הזה הוא "וויכוח" או "מריבה".

hi_sorie 14-05-10 17:24

הקוד שלך לא נכון,

למילה blabla יש 12,800,000 תוצאות לפי הדף של גוגל.

הקוד שלך פולט : 1460000
שלי פולט : 12,800,000

למה?

Shay Ben Moshe 14-05-10 19:17

חי, זה תלוי לאן לאן הפנייה ניגשת (הכוונה לאיזה google, באיזה שפה וכדומה). שלי ניגשת בטח בצורה שונה משלך, כל זה ניתן להתאים על ידי הפרמטרים של הGET..
אני לא בקיא יותר מדי בAPI הזה אז אני לא רוצה להגיד דברים שאני לא יודע לגביהם.

IgalSt 14-05-10 19:25

גוגל שונה, כמות שונה:
http://my.jetscreenshot.com/2411/m_2...yvrn-329kb.jpg

מה גם לפעמים במהלך הדפדפוף הכמויות יכולות להשתנות כאשר מגיעים לעמודים 3,4,5 או יותר (בהתאם לכמות).

ב-API אכן ישנה אפשרות אם אתה מעוניין לקבל תוצאות לוקאליות של מדינה ספציפית או ללא שיוך לוקאלי.

יהיה יותר חכם לבצע את הבדיקה על ביטוי קצת פחות נפוץ או על site: ולראות את ההבדלים בין ה-API לתוצאות של הגוגל שמיועד לגולש

עריכה:
אגב, שימו לב לכך שלדוגמא ברוסית גוגל תרגם את ה-blabla לתעתיק הרוסי של זה: Бла-Бла-Бла ואף הוסיף את המקפים וחזרה נוספת על ה-bla

intercooler3819 14-05-10 20:00

התוצאות מותאמות לפי מדינה ולפי שפה.. אני חיפשתי רק לפי מדינת ישראל, אתה חיפשת גם לפי עברית

hi_sorie 14-05-10 23:53

אצלך זה מחפש בעולמי דרך ה API.

הנתון הזה בכלל לא נחוץ ולא נכון עבור המטרה של התוכנית, אלא אם אפשר לסנן תוצאות שיוצגו בדיוק לפי מה שמופיע שאתה מריץ חיפוש מישראל.

במידה והמילת מפתח והשימוש שלך הוא עולמי, ה API צודק.

בקיצור צריך לראות אם אפשר בכלל להגיע לנתון שמגיע מחיפוש רגיל, כי לדעתי זאת המטרה.

IgalSt 17-05-10 08:32

ציטוט:

נכתב במקור על ידי hi_sorie (פרסם 764161)
אצלך זה מחפש בעולמי דרך ה API.

הנתון הזה בכלל לא נחוץ ולא נכון עבור המטרה של התוכנית, אלא אם אפשר לסנן תוצאות שיוצגו בדיוק לפי מה שמופיע שאתה מריץ חיפוש מישראל.

במידה והמילת מפתח והשימוש שלך הוא עולמי, ה API צודק.

בקיצור צריך לראות אם אפשר בכלל להגיע לנתון שמגיע מחיפוש רגיל, כי לדעתי זאת המטרה.

יש אפשרות
פרטים נוספים על הפרמטרים האפשרים ניתן למצא פה:
http://code.google.com/apis/ajaxsear...l#_intro_fonje

intercooler3819 17-05-10 12:48

ציטוט:

נכתב במקור על ידי hi_sorie (פרסם 764161)
אצלך זה מחפש בעולמי דרך ה API.

הנתון הזה בכלל לא נחוץ ולא נכון עבור המטרה של התוכנית, אלא אם אפשר לסנן תוצאות שיוצגו בדיוק לפי מה שמופיע שאתה מריץ חיפוש מישראל.

במידה והמילת מפתח והשימוש שלך הוא עולמי, ה API צודק.

בקיצור צריך לראות אם אפשר בכלל להגיע לנתון שמגיע מחיפוש רגיל, כי לדעתי זאת המטרה.

אם זה לא היה אפשרי לא הייתי מציע ולא הייתי מתחיל להגיב כאן בכלל..

מה גם שהגיונית אין סיבה להשתמש ב API אם הוא לא משרת את המטרה שלו..|קורץ|

dabi 18-05-10 14:21

ציטוט:

נכתב במקור על ידי Baku (פרסם 763452)
הוא סתם ניסה להישמע מבין דגול ולהגיד AJAX בצורה עתיקה..

אז איפה זה הפלט??

ציטוט:

נכתב במקור על ידי RS324 (פרסם 763604)
XML HTTP REQUEST זה לא כשאתה מבקש דף ומקבל תוצאה של XML , הדבר שנשמע לי הכי קרוב למה שאמרת זה לעשות פוסט של XML לדף מסויים מעבר לזה לא מכיר את המושג וזה גם לא ממש משנה

לפותח האשכול, אל תתאמץ להתחבר ל API

בדיקת מיקום במנועי חיפוש באתר googletools כבר למעלה משנתיים ניגש בכל בדיקה ל 10 עמודים של גוגל (כי תצוגה של 10 תוצאות ו 100 תוצאות שונה - יש שינוי במיקומים) ולא הייתה בעיה איתו אפילו פעם אחת
ואין שם שום טריקים מיוחדים....

אז תרגיש חופשי לגשת לדף ה HTML ולהשיג את מה שאתה צריך.
תהנה

השאלה כמה פעמים ביום אתה מבצע את שאילתה
אולי במידה והיית מבצע אותה מספר כפול ביום(4000-8000 קריאות ביום) כן היית נחסם

AlmogBaku 18-05-10 17:56

ח'ברה אני חושב שהגענו פה לכמה מסקנות סופיות, וחבל להמשיך את הדיון סתם ולחפור:

א. xml http request - השם של האובייקט שמשתמשים בו כדי ליצור פעולת ajax(לכל העקשנים- חלאס!! בחייכם! יש ויקיפדיה, יש אינטרנט, יש גוגל, תלמדו ajax בלי מחלקות למינהם ותבינו. מילא זה היה מושג לא ברור, אבל זו מילה במילה!!!!!!!!)

ב. ה-api עדיף באופן חד משמעי מבחינת נוחות, קלות, ביצועים, סדר של הקוד, תעדוף בגוגל וכו'.
ג. תשמרו על הקוד שלכם פשוט(KISS - KIP IT SIMPLE & STUPID)- זה תמיד עובד ויותר טוב.

RS324 18-05-10 20:33

ציטוט:

נכתב במקור על ידי dabi (פרסם 764556)
אז איפה זה הפלט??



השאלה כמה פעמים ביום אתה מבצע את שאילתה
אולי במידה והיית מבצע אותה מספר כפול ביום(4000-8000 קריאות ביום) כן היית נחסם

בגלל זה אפשר לפצל את זה ל X שרתים ואפשר לעשות המון דברים... תקרא את מה שכתבתי מקודם

ציטוט:

נכתב במקור על ידי Baku (פרסם 764581)
ח'ברה אני חושב שהגענו פה לכמה מסקנות סופיות, וחבל להמשיך את הדיון סתם ולחפור:

א. xml http request - השם של האובייקט שמשתמשים בו כדי ליצור פעולת ajax(לכל העקשנים- חלאס!! בחייכם! יש ויקיפדיה, יש אינטרנט, יש גוגל, תלמדו ajax בלי מחלקות למינהם ותבינו. מילא זה היה מושג לא ברור, אבל זו מילה במילה!!!!!!!!)

ב. ה-api עדיף באופן חד משמעי מבחינת נוחות, קלות, ביצועים, סדר של הקוד, תעדוף בגוגל וכו'.
ג. תשמרו על הקוד שלכם פשוט(KISS - KIP IT SIMPLE & STUPID)- זה תמיד עובד ויותר טוב.

האגו עלה לראש ?
ד"א כותבים KEEP ולא KIP ואתה יכול לחפש איפה שאתה רוצה, יש ויקיפדיה , יש אינטרנט יש גוגל.....

AlmogBaku 19-05-10 19:46

ציטוט:

נכתב במקור על ידי RS324 (פרסם 764599)
בגלל זה אפשר לפצל את זה ל X שרתים ואפשר לעשות המון דברים... תקרא את מה שכתבתי מקודם



האגו עלה לראש ?
ד"א כותבים KEEP ולא KIP ואתה יכול לחפש איפה שאתה רוצה, יש ויקיפדיה , יש אינטרנט יש גוגל.....

חחחחחחח צודק. פשוט רשמתי KIS ואז תקינתי ו..בלעט! טעות שלי חח =]

dabi 19-05-10 20:18

הבנתי והחכמתי אבל לא מצאתי דוגמא לAPI שמחזיר פלט כ XML או בכל דרך אחרת שאני יכול לקחת משם "נתונים" דרך PHP
תודה

IgalSt 19-05-10 21:59

ציטוט:

נכתב במקור על ידי dabi (פרסם 764677)
הבנתי והחכמתי אבל לא מצאתי דוגמא לAPI שמחזיר פלט כ XML או בכל דרך אחרת שאני יכול לקחת משם "נתונים" דרך PHP
תודה

אתה מקבל JSON כפלט מה-API.
הרבה יותר נוח לעבוד איתו מאשר עם XML.
לדעתי יש תמיכה מובנת ב-PHP ל-JSON. אם לא, באתר הבית של JSON תוכל לקבל קוד מוכן לזה

AlmogBaku 20-05-10 11:38

ציטוט:

נכתב במקור על ידי Exa.co.il (פרסם 764688)
אתה מקבל JSON כפלט מה-API.
הרבה יותר נוח לעבוד איתו מאשר עם XML.
לדעתי יש תמיכה מובנת ב-PHP ל-JSON. אם לא, באתר הבית של JSON תוכל לקבל קוד מוכן לזה

http://php.net/manual/en/function.json-decode.php

dabi 21-05-10 13:24

סלחו לי על הבורות אבל אני לא מבין
כאן
http://code.google.com/intl/iw/apis/ajaxsearch/
לחצתי על
Web Search
ואז על
Start using the Google AJAX Search API
קיבלתי קוד כזה
PHP קוד:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml">  <head>    <title>My Google AJAX Search API Application</title>    <script src="http://www.google.com/jsapi?key=ABQIAAAAXOInvclKKI-Cl2AsiaABRBR524FBW6YVHC-bTF3Ag0rxFkvjERS3zqQ5Y5b8AP3qchy6GFq_pbvcnw" type="text/javascript"></script>    <script language="Javascript" type="text/javascript">    //<![CDATA[    google.load("search", "1");    function OnLoad() {      // Create a search control      var searchControl = new google.search.SearchControl();      // Add in a full set of searchers      var localSearch = new google.search.LocalSearch();      searchControl.addSearcher(localSearch);      searchControl.addSearcher(new google.search.WebSearch());      searchControl.addSearcher(new google.search.VideoSearch());      searchControl.addSearcher(new google.search.BlogSearch());      // Set the Local Search center point      localSearch.setCenterPoint("New York, NY");      // Tell the searcher to draw itself and tell it where to attach      searchControl.draw(document.getElementById("searchcontrol"));      // Execute an inital search      searchControl.execute("Google");    }    google.setOnLoadCallback(OnLoad);    //]]>    </script>  </head>  <body>    <div id="searchcontrol">Loading...</div>  </body></html> 

וזה לא עושה כלום שאני מריץ אותו
אשמח להסבר בבקשה

RS324 21-05-10 13:42

זה קוד HTML לשים בדף באתר שלך
תעשה קובץ HTML תשים את זה בפנים ותראה מה קורה...

dabi 21-05-10 13:46

ציטוט:

נכתב במקור על ידי RS324 (פרסם 764843)
זה קוד HTML לשים בדף באתר שלך
תעשה קובץ HTML תשים את זה בפנים ותראה מה קורה...

הרצתי
זה רק רושם Loading...
לא הבנתי איפה אני מחפש דרך זה משהו בגוגל ומקבל תוצאות שזה מה שאני רוצה הרי
תודה


כל הזמנים הם GMT +2. הזמן כעת הוא 15:21.

מופעל באמצעות VBulletin גרסה 3.8.6
כל הזכויות שמורות ©
כל הזכויות שמורות לסולל יבוא ורשתות (1997) בע"מ