Autogeniusz.pl
|
|
« : 12 Январь 2013, 00:04:46 » |
|
Всем добрый вечер Дела страничку с поиском, используя google search api, результаты получал в JSON. Вроде как все было нормально, но тут гуглу, видимо, надоело со мной работать, и больше он мне данные не высылает... В чем может быть проблема? синтаксис запроса: http://ajax.googleapis.com/ajax/services/search/web?v=1.0&q=belarus такой. На скрине то, что выдает гугл вместо нормальных данных (1 скрин), на втором скрине - попытка через 10 минут, следующий клик - опять ошибка... PS: и еще - может кто сталкивался, как убрать эти кракозябры (текст, а потом вставки типа \u003cb\u003e...\u003c/b\u003e \u003cb) в C#, думаю может их просто вырезать из текста ответа гугла? или может какой параметр надо в запросе поменять, чтоб он человеческую речь слал)))
|
|
|
Записан
|
|
|
|
coolasm
|
Крокозябры - это коды спецсимволов (всякие там ':' '/' '<' '>' ) Откройте свой запрос в браузере, а результат вставьте в JSON-валидатор (к примеру http://jsonlint.com/) для http://ajax.googleapis.com/ajax/services/search/web?v=1.0&q=belarusполучилось: { "responseData": { "results": [ { "GsearchResultClass": "GwebSearch", "unescapedUrl": "http://www.belarus.by/", "url": "http://www.belarus.by/", "visibleUrl": "www.belarus.by", "cacheUrl": "http://www.google.com/search?q=cache:ziPBga_n060J:www.belarus.by", "title": "Official website, <b>Belarus</b> | <b>Belarus</b>.by", "titleNoFormatting": "Official website, Belarus | Belarus.by", "content": "Start here for your complete introduction to the republic of <b>Belarus</b>, a fascinating country with a rich cultural heritage and extraordinary landscapes." }, { "GsearchResultClass": "GwebSearch", "unescapedUrl": "http://en.wikipedia.org/wiki/Belarus", "url": "http://en.wikipedia.org/wiki/Belarus", "visibleUrl": "en.wikipedia.org", "cacheUrl": "http://www.google.com/search?q=cache:eBZO_Um_t40J:en.wikipedia.org", "title": "<b>Belarus</b> - Wikipedia, the free encyclopedia", "titleNoFormatting": "Belarus - Wikipedia, the free encyclopedia", "content": "<b>Belarus</b> officially the Republic of <b>Belarus</b>, is a landlocked country in Eastern Europe bordered by Russia to the northeast, Ukraine to the south, Poland to the <b>...</b>" }, { "GsearchResultClass": "GwebSearch", "unescapedUrl": "https://www.cia.gov/library/publications/the-world-factbook/geos/bo.html", "url": "https://www.cia.gov/library/publications/the-world-factbook/geos/bo.html", "visibleUrl": "www.cia.gov", "cacheUrl": "http://www.google.com/search?q=cache:uIpglDuYo40J:www.cia.gov", "title": "<b>Belarus</b> - CIA - The World Factbook", "titleNoFormatting": "Belarus - CIA - The World Factbook", "content": "Dec 19, 2012 <b>...</b> Features a map and brief descriptions of geography, economy, government, and people." }, { "GsearchResultClass": "GwebSearch", "unescapedUrl": "http://travel.state.gov/travel/cis_pa_tw/cis/cis_1033.html", "url": "http://travel.state.gov/travel/cis_pa_tw/cis/cis_1033.html", "visibleUrl": "travel.state.gov", "cacheUrl": "http://www.google.com/search?q=cache:Qjo5qeihttAJ:travel.state.gov", "title": "<b>Belarus</b>", "titleNoFormatting": "Belarus", "content": "Offers travel information including Background Notes, entry and exit requirements , safety and security, crime, health and transport." } ], "cursor": { "resultCount": "21,400,000", "pages": [ { "start": "0", "label": 1 }, { "start": "4", "label": 2 }, { "start": "8", "label": 3 }, { "start": "12", "label": 4 }, { "start": "16", "label": 5 }, { "start": "20", "label": 6 }, { "start": "24", "label": 7 }, { "start": "28", "label": 8 } ], "estimatedResultCount": "21400000", "currentPageIndex": 0, "moreResultsUrl": "http://www.google.com/search?oe=utf8&ie=utf8&source=uds&start=0&hl=en&q=belarus", "searchResultTime": "0.14" } }, "responseDetails": null, "responseStatus": 200 }
|
|
|
Записан
|
HTTP Error 404 - File or directory not found.
|
|
|
Clinique Happy
|
Всем добрый вечер Дела страничку с поиском, используя google search api, результаты получал в JSON. Вроде как все было нормально, но тут гуглу, видимо, надоело со мной работать, и больше он мне данные не высылает... В чем может быть проблема? синтаксис запроса: http://ajax.googleapis.com/ajax/services/search/web?v=1.0&q=belarus такой. На скрине то, что выдает гугл вместо нормальных данных (1 скрин), на втором скрине - попытка через 10 минут, следующий клик - опять ошибка... PS: и еще - может кто сталкивался, как убрать эти кракозябры (текст, а потом вставки типа \u003cb\u003e...\u003c/b\u003e \u003cb) в C#, думаю может их просто вырезать из текста ответа гугла? или может какой параметр надо в запросе поменять, чтоб он человеческую речь слал))) \u003cb - это юникод, преобразовать плёвое дело, вырезать - глупое. Я думаю 403 ошибка возникла в случае превышения количества запросов к api в единицу времени и тебя забанили по IP (возможно это был и не ты). Ну или либо ты нарушил одно из правил гугла и теперь все запросы реджектаются.
|
|
|
Записан
|
|
|
|
Autogeniusz.pl
|
В общем кракозябры действительно решились очень легко Как-то так (может кому пригодится): GoogleSay = System.Text.RegularExpressions.Regex.Unescape(GoogleSay); где GoogleSay - строка ответа JSON от гугла. А вот как доказать гуглу, что я хороший, и не надо меня банить , так пока не решил
|
|
|
Записан
|
|
|
|
arturline
Молодой Гродненец
Репутация: +4/-0
Offline
Пол:
Сообщений: 27
Я люблю Гродненский форум!
|
Код в студию. P.S. У меня все работает.
|
|
|
Записан
|
|
|
|
Autogeniusz.pl
|
public static List<Result> CreateJSON(string SearchText, int number) { string s = " http://ajax.googleapis.com/ajax/services/search/web?v=1.0&rsz=8&hl=ru&q=" + HttpUtility.UrlEncode(SearchText)+"&start="+number; HttpWebRequest r0 = (HttpWebRequest)WebRequest.Create(s); r0.Method = "GET"; HttpWebResponse GoogleResponse = (HttpWebResponse)r0.GetResponse(); StreamReader sr = new StreamReader(GoogleResponse.GetResponseStream()); string GoogleSay = sr.ReadToEnd(); sr.Close(); GoogleSay = HttpUtility.UrlDecode(GoogleSay); GoogleSay = System.Text.RegularExpressions.Regex.Unescape(GoogleSay); string[] strArr = GoogleSay.Split (new string[] { "{\"responseData\": {\"results\":[{", "}],\"cursor\":{\"resultCount\":\"", "\",\"pages\"", "},{" }, StringSplitOptions.RemoveEmptyEntries); List<string> tempLst = new List<string>(); for (int i = 0; i < strArr.Length;i++ ) { if (strArr .Contains("GsearchResultClass")) { tempLst.Add(strArr); } else { break; } } strArr = tempLst.ToArray<string>(); List<Result> results = new List<Result>(); foreach (string i in strArr) { results.Add(new Result(i)); } return results; } В итоге во вьюшку идет список объектов (результат). Там уже нужные поля оформляются и выводятся пользователю. Сегодня запустил - работает, вчера перед сном - не работало В коде ничего не менял)
|
|
|
Записан
|
|
|
|
Clinique Happy
|
GoogleSay.Split Жгёшь. А десерилизовать json в нормальный объект слабо?
|
|
|
Записан
|
|
|
|
Autogeniusz.pl
|
GoogleSay.Split Жгёшь. А десерилизовать json в нормальный объект слабо? Не слабо - так и сделаю) просто в данном случае это проблему не решит - без десериализаци при наличии полноценного ответа от гугла всё работает, а вот когда он начинает 403 ошибку присылать - уже бесполезно что-то делать... такое ощущение, что я могу максимум пару раз подряд к нему обратиться, а потом банят
|
|
|
Записан
|
|
|
|
arturline
Молодой Гродненец
Репутация: +4/-0
Offline
Пол:
Сообщений: 27
Я люблю Гродненский форум!
|
У меня началась такая же ерунда. Срабатывает раз через раз. Насколько я понимаю, нужно использовать асинхронные запросы к Goolge, тогда проблем не будет
|
|
|
Записан
|
|
|
|
Clinique Happy
|
У меня началась такая же ерунда. Срабатывает раз через раз. Насколько я понимаю, нужно использовать асинхронные запросы к Goolge, тогда проблем не будет А разница какая, используешь ты синхронные либо асинхронные запросы?
|
|
|
Записан
|
|
|
|
arturline
Молодой Гродненец
Репутация: +4/-0
Offline
Пол:
Сообщений: 27
Я люблю Гродненский форум!
|
У меня началась такая же ерунда. Срабатывает раз через раз. Насколько я понимаю, нужно использовать асинхронные запросы к Goolge, тогда проблем не будет А разница какая, используешь ты синхронные либо асинхронные запросы? А разница какая, используешь ты синхронные либо асинхронные запросы? Спасибо, вопрос решен!
|
|
|
Записан
|
|
|
|
|