Клуб API Вебмастера

Проблема с добавление сайта в Яндекс.Вебмастер

Добрый день!

Пытаюсь написать десктопное приложение (на Python), для работы с Метрикой и Вебмастером, все методы работают, кроме добавления сайта в Вебмастер (http://api.yandex.ru/webmaster/doc/dg/reference/hosts-add-site.xml).

Код примерно такой:

    def add_site(self, uid, site_url):

        xml_string = u"<host><name>%s</name></host>" % site_url

        rq = urllib2.Request("https://webmaster.yandex.ru/api/%s/hosts" % uid)

        rq.add_header('Authorization' , 'OAuth %s' % USER_TOKEN)

        rq.add_header('Content-Type' , 'application/xml')

        rq.add_header('Content-Length' , len(xml_string))

        rq.add_data(xml_string)

        f = urllib2.urlopen(rq)

Получаю ошибку 404 (urllib2.HTTPError: HTTP Error 404: Not Found)

Аналогичный метод получения списка сайтов работает:

    def get_sites(self, uid):

        rq = urllib2.Request("https://webmaster.yandex.ru/api/%s/hosts" % uid)

        rq.add_header('Authorization', 'OAuth %s' % USER_TOKEN)

        f = urllib2.urlopen(rq)

Подскажите, пожалуйста, в чём может быть причина?

3 комментария

Добрый день.

Вероятно, проблема в том, что вы делаете GET-запрос, а нужен POST. Посмотрите в документации: http://api.yandex.ru/webmaster/doc/dg/reference/hosts-add-site.xml

Мария, спасибо за ответ.

Посмотрел - всё таки отправляется POST, запрос выглядит так:

send: 

'POST /api/UID/hosts HTTP/1.1\

Host: webmaster.yandex.ru

Accept-Encoding: identity

Content-Length: 34

Content-type: application/xml

Authorization: OAuth TOKEN'

send: 'host.com'

 

Ответ приходит следующий:

reply: 

'HTTP/1.1 404 Not Found\r\n'

header: Content-Type: text/xml; charset=UTF-8

header: Expires: Thu, 20 Dec 2012 11:19:14 GMT

header: Set-Cookie: yandexuid=0000000000; domain=.yandex.ru; path=/; expires=Tue, 19 Jan 2038 03:14:07 GMT

header: Transfer-Encoding: chunked

header: Date: Thu, 20 Dec 2012 11:14:14 GMT

header: Server: lighttpd/1.4.26

No data was sent

Какой сайт добавляли и когда? Попробуем посмотреть логи.