Sunday, January 29, 2012

АВТОРИЗАЦИЯ И ДОБАВЛЕНИЕ САЙТА В YANDEX WEBMASTER С ПОМОЩЬЮ PYTHON И URLLIB2 http://it-profity.ru/avtorizatsiya-i-dobavlenie-sayta-v-yandex-webmaster-s-pomoshhyu-python-i-urllib2/


http://it-profity.ru/avtorizatsiya-i-dobavlenie-sayta-v-yandex-webmaster-s-pomoshhyu-python-i-urllib2


АВТОРИЗАЦИЯ И ДОБАВЛЕНИЕ САЙТА В YANDEX WEBMASTER С ПОМОЩЬЮ PYTHON И URLLIB2

Здравствуйте. В этой статье я постараюсь подробно рассказать о работе urllib2 с cookie на примере авторизации и добавления сайта в Yandex Webmaster. Писал код при создании автоматизированного seo комплекса.

Ну что ж, приступим.

Первым этапом необходимо перехватить все запросы браузера к серверу. Для этого я пользовался всем известным дополнением firebug для firefox. Можно использовать и другие средства, например, live http headers для того же firefox. Думаю, с этим вопросов не возникнет.

После получения всей необходимой информации, можно приступать к написанию программы.

Первоначально импортируем необходимые модули и подготавливаем urllib2 к работе с cookie:

import urllib

import urllib2

import re

import cookielib



cookieJar = cookielib.CookieJar()

opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cookieJar))

headers = {"User-Agent":"Mozilla/5.0 (X11; U; Linux i686; ru; rv:1.9.2.6) Gecko/20100628 Ubuntu/10.04 (lucid) Firefox/3.6.6", "Accept":"text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8", "Keep-Alive": "115", "Connection":"keep-alive"}



Теперь мы можем открывать страницы таким образом:

params=urllib.urlencode({ словарь переменных и значений })

req=urllib2.Request('http://test.com', params, headers) #headers - из предыдущего листинга; представляемся серверу браузером а не роботом

opener.open(req) #собственно, открываем страницу с параметрами





Теперь проходим авторизацию:

account=['yandex_login', 'yandex_password'] #ваши логин и пароль от аккаунта Яндекса

params = urllib.urlencode({'login':account[0], 'passwd':account[1], 'twoweeks':'yes', 'retpath':'http://webmaster.yandex.ru'})

req = urllib2.Request('http://pda-passport.yandex.ru/passport?mode=mauth', params, headers)

opener.open(req)



И все! urllib2 предоставляет очень высокоуровневые методы работы с сайтами. Если вы посмотрите всю процедуру авторизации в Яндексе, то увидите, что она состоит из множества шагов, с переадресациями и прочими сложностями. А urllib2 все это делает автоматически.



Теперь выложу сразу всю функцию добавления сайта с пояснениями. Думаю, там все понятно.

def getUniq(data):

d=re.compile('(.*?)')

res=re.findall(d, data)

return res[0]



"""После добавления сайта в панель Вебмастера необходимо пройти процедуру верификации сайта путем создания пустого файла в корне сайта. Функция getUniq() получает имя этого файла.

Наверно, удобнее использовать BeautifulSoup для этой цели, но и решение с regexp имеет место быть."""



def addSite(your_site):

try:

params = urllib.urlencode({'hostname': your_site, 'do':'add'})

req = urllib2.Request('http://webmaster.yandex.ru/site/add.xml?'+params, headers=headers)

f=opener.open(req)

data=f.read()

url=f.geturl()

query=urlparse.urlparse(url).query.split('&')

HOST=-1

for i in query:

if 'host=' in i:

HOST=urllib.splitvalue(i)[1]

"""Довольно некрасиво получилось, но суть вот в чем. После добавления сайта он получает в Вебмастере уникальный id, который лучше сохранить для выполнения различных действий, например, верификация сайта и добавление sitemap для ускорения индексации."""



SECRET=getUniq(data) #получаем уникальное имя файла для прохождения верификации



f=open('/var/www/%s/%s'%(your_site, SECRET), 'w')

f.close()

"""Если ваш сайт хранится на локальном сервере, то сразу создаем файл верификации."""



params = urllib.urlencode({'host': HOST, 'do':'verify', 'type': '0'})

req = urllib2.Request('http://webmaster.yandex.ru/site/verification.xml?'+params, headers=headers)

opener.open(req)

opener.open(req)

"""Это не ошибка, необходимо действительно отправлять два одинаковых запроса. Так и в браузере надо делать (нажимать два раза на кнопку) - какой-то глюк Яндекса."""



params = urllib.urlencode({'host': HOST, 'do':'add', 'url': 'http://%s/sitemap.xml'%(your_site)})

req = urllib2.Request('http://webmaster.yandex.ru/site/map.xml?'+params, headers=headers)

opener.open(req)

"""Сабмитим наш sitemap."""

except Exception as err:

print err



Хочу сразу предупредить, что при большом количестве запросов аккаунт будет забанен, поэтому сильно увлекаться не стоит.



Собственно, это все, о чем я хотел сегодня рассказать. С радостью отвечу на любые ваши вопросы.

Похожие записи:

  1. Наращиваем ссылочную массу с питоном
  2. Получение данных пользователя Facebook в 5-ти шагах
  3. Python клиент для Zimbra
  4. Декораторы в Python
  5. Python scirpt на службе сетевого администратора

No comments:

Post a Comment