Вопрос по xml, asp.net, google-api, c# – Google Weather API 403 Ошибка [повторяется]

9

This question already has an answer here:

Google Weather API gone? 4 answers

Я решил получить информацию из Google Weather API - код, который я использую ниже, работает нормально.

            XmlDocument widge = new XmlDocument();
            widge.Load("https://www.google.com/ig/api?weather=Brisbane/dET7zIp38kGFSFJeOpWUZS3-");
            var weathlist = widge.GetElementsByTagName("current_conditions");
            foreach (XmlNode node in weathlist)
            {

                City.Text = ("Brisbane");
                CurCond.Text = (node.SelectSingleNode("condition").Attributes["data"].Value);
                Wimage.ImageUrl = ("http://www.google.com/" + node.SelectSingleNode("icon").Attributes["data"].Value);
                Temp.Text = (node.SelectSingleNode("temp_c").Attributes["data"].Value + "°C");
        }
     }

Как я уже сказал, я могу извлечь необходимые данные из файла XML и отобразить их, однако, если страница обновляется или текущий сеанс все еще активен, я получаю следующую ошибку:

WebException was unhandled by user code - The remote server returned an error: 403 Forbidden Exception.

Мне интересно, может ли это быть связано с какими-то ограничениями доступа, налагаемыми на доступ к этому конкретному XML-файлу?

Further research and adaptation of suggestions

Как указано ниже, это ни в коем случае не лучшая практика, но я включил улов, который я сейчас использую, для исключения. Я запускаю этот код на Page_Load, поэтому просто делаю постбэк на страницу. С тех пор я не заметил никаких проблем. С точки зрения производительности я не слишком обеспокоен - я не заметил какого-либо увеличения времени загрузки, и это решение является временным, потому что это все для целей тестирования. Я все еще нахожусь в процессе использования Погодного API Yahoo.

        try
        {
            XmlDocument widge = new XmlDocument();
            widge.Load("https://www.google.com/ig/api?weather=Brisbane/dET7zIp38kGFSFJeOpWUZS3-");
            var list2 = widge.GetElementsByTagName("current_conditions");
            foreach (XmlNode node in list2)
            {

                City.Text = ("Brisbane");
                CurCond.Text = (node.SelectSingleNode("condition").Attributes["data"].Value);
                Wimage.ImageUrl = ("http://www.google.com/" + node.SelectSingleNode("icon").Attributes["data"].Value);
                Temp.Text = (node.SelectSingleNode("temp_c").Attributes["data"].Value + "°C");

            }
        }
        catch (WebException exp)
        {
            if (exp.Status == WebExceptionStatus.ProtocolError &&
                exp.Response != null)
            {
                var webres = (HttpWebResponse)exp.Response;
                if (webres.StatusCode == HttpStatusCode.Forbidden)
                {
                    Response.Redirect(ithwidgedev.aspx);
                }

            }
        }
Google article illustrating API error handling

Ошибки обработки API Google

Thanks to:

https://stackoverflow.com/a/12011819/1302173 (Поймать 403 и вспомнить)

https://stackoverflow.com/a/11883388/1302173 (Обработка ошибок и общая информация API Google)

https://stackoverflow.com/a/12000806/1302173 (Обработка ответов / кэширование JSON - планы на будущее)

Alternative

Я нашел эту отличную альтернативу с открытым исходным кодом недавно

OpenWeatherMap - бесплатный API данных о погоде и прогнозах

Ваш Ответ

4   ответа
1

но я интенсивно использую этот API в некоторых приложениях WP7 и Metro. Я справляюсь с этим, перехватывая исключение (чаще всего 403) и просто повторно вызывая службу внутри перехвата, если в Google возникает ошибка, обычно это кратко и приводит только к 1 или 2 дополнительным вызовам. ,

12

http://status-dashboard.com/32226/47728

enter image description here

Более года я использую Google Weather API для подачи на телефонный сервер, чтобы телефоны PolyCom получали страницу погоды. Более года он работает без ошибок. По состоянию на 7 августа 2012 года были частые периодические ошибки 403.

Я обращаюсь к службе один раз в час (как всегда было), поэтому я не думаю, что частота запросов - это проблема. Более вероятно, что прерывистый характер 403 связан с частичным развертыванием изменения конфигурации или изменения CDN в Google.

API погоды Google на самом деле не является опубликованным API. Это была внутренняя служба, очевидно предназначенная для использования в iGoogle, поэтому уровень поддержки остается неопределенным. Я вчера написал в твиттере googleapis и не получил ответа.

It may be better to switch to a promoted weather API such as: Подземная погода or Yahoo Weather.

Я добавил следующее «если не определено» Обработка ошибок Perl-код сам вчера, чтобы справиться с этим, но если проблема не исчезнет, я переключусь на более полностью поддерживаемый сервис:

my $url = "http://www.google.com/ig/api?weather=" . $ZipCode ;

my $tpp = XML::TreePP->new();
my $tree = $tpp->parsehttp( GET => $url );

my $city = $tree->{xml_api_reply}->{weather}->{forecast_information}->{city}->{"-data"};

unless (defined($city)) {
    print "The weather service is currently unavailable. \n";
    open (MYFILE, '>/home/swarmp/public_html/status/polyweather.xhtml');
    print MYFILE qq(<?xml version="1.0" encoding="utf-8"?>\n);
    print MYFILE qq(<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "xhtml11.dtd">\n);
    print MYFILE qq(<html xmlns="http://www.w3.org/1999/xhtml">\n);
    print MYFILE qq(<head><title>Weather is Unavailable!</title></head>\n);
    print MYFILE qq(<body>\n);
    print MYFILE qq(<p>\n);
    print MYFILE qq(The weather service is currently unavailable from the data vendor.\n);
    print MYFILE qq(</p>\n);
    print MYFILE qq(</body>\n);
    print MYFILE qq(</html>\n);
    close MYFILE;
    exit(0);
}...
Sheesh! Разбей свою попытку / лови всех ... +1
Отличный ответ! Я был бы вынужден предположить, что демонтаж iGoogle влияет на этот сервис. Я смутно осознавал, что API был «только для использования виджетов» поэтому я полагаю, что не слишком удивительно, что существуют проблемы с надежностью обслуживания. Я буду изучать использование этих альтернатив и, возможно, адаптировать идеи, лежащие в основе обработки исключений. Еще раз спасибо! mitchimus
По состоянию на 27 августа 2012 г. служба отвечает последовательной ошибкой 403 и сообщением о том, что вы отправляете автоматические запросы .:
Я заново реализован с Weather Underground. Пример кода Perl для домашней страницы погоды телефона Polycom здесь:gist.github.com/3613378
1

Сравните заголовок запроса в неправильном запросе и рабочий запрос. Рабочий запрос включает в себя куки. Но откуда они?

Удалите все файлы cookie вашего браузера из Google. Weather api call больше не будет работать в вашем браузере. Перейдите на google.com, а затем в API погоды, он снова будет работать.

Google проверяет куки, чтобы заблокировать несколько вызовов API. Получение куки один раз перед обработкой всех запросов API погоды решит проблему. Срок действия файлов cookie истекает через год. Я предполагаю, что вы будете перезапускать свое приложение чаще, чем раз в год. Так что вы получите новый. Получение куки для каждого запроса закончится одной и той же проблемой: слишком много разных запросов.

Один совет: погода не часто меняется, поэтому сохраняйте информацию в формате json (возможно, в течение часа). Это уменьшит трудоемкие операции как запросы!

0

что если вы попытаетесь выполнить запрос в чистом браузере (например, в режиме инкогнито в новом окне в chrome), служба погоды Google будет работать. Возможная проблема куки?

К сожалению, свежий браузер не работает. Проблема в том, что сама служба никогда не предназначалась для использования за пределами виджета погоды, используемого iGoogle. Из-за ряда факторов, в том числе медленного прекращения использования iGoogle, я не удивлен, что у нас есть проблемы с производительностью. Я опубликую свой код для API Yahoo на следующий день или два. Но я не думаю, что кто-либо из нас действительно увидит конец этим проблемам, независимо от состояния браузера. mitchimus

Похожие вопросы