Tuesday, August 18th, 2009
Частенько вебмастера балуются автоблогами, некоторые делают это хорошо, некоторые штампуют откровенный шлак по типу дорвеев и репостилок фидов, вообщем не суть, я бы посоветовал подумать и делать хорошо, чтобы потом не жаловаться на гугл. Но для того, чтобы реализовать подобное нужно уметь запостить в свой же блог, задача не сложная, но тем не менее ей нужно уделить какое-то время, рассекая просторы интернетов наткнулся на уже готовое решение, которое позволит сделать все элегантно и с минимальными усилиями :
import wordpresslib
url = 'http://www.mysite.com/wordpress/xmlrpc.php'
wp = wordpresslib.WordPressClient(url, 'username', 'password')
wp.selectBlog(0)
post = wordpresslib.WordPressPost()
post.title = 'Post title'
post.description = 'Post content'
idPost = wp.newPost(post, True)
Заявленные функции :
- Создание новых постов
- Редактирование старых
- Публикация “черновиков” (т.е. ранее сохраненных но неопубликованных)
- Удаление постов
- Изменение категорий привязанных к посту
- Информация по блогу и пользователям
- Загрузка мультимедиа файлов (фотографии & видео)
- Получить последний пост/пинги/трекбэки
Posted in Python, Wordpress | No Comments »
Tuesday, August 11th, 2009
Хотел написать для начала, что нибудь вроде “Выдача гугла – бесценный источник информации”, ну да ладно, все мы знаем зачем вебмастеру понадобилось вдруг анализировать топы гугла по спискам кейвордов или хуже того парсить урлы/отслеживать позиции сайтов =) вообщем предельно ясно, что задача анализа результатов выдачи возникает часто и найти применение результатам не проблема. Сложность только в том, что нужно писать код, причем желательно быстро и с минимальными усилиями. Помимо самих SERP было бы неплохо узнать и ключевые параметры – PR (PageRank) и Index, полезная информация, я гарантирую. Некоторое время назад, я кодил на PHP, потом бросил, бесит отсутствие строгой типизации (и потоков, да и тем кто с детства привык к красоте и логичности кода на Object Pascal/C++ пхп должен быть глубоко противен), еще и что-нибудь вроде WAMP/XAMPP поднимать на локальном компе. Python ничуть не хуже все к чему привыкли на PHP есть и на Python.
Для желающих приобщиться доступен Complete and Ready-to-Install industry standard Python distribution – после установки можно сразу приступать к работе, именно в таком виде должен поставляться язык программирования.
Итак для начала нужно получить данные от гугла, можно попробовать делать это через curl/liburl, но это hard-style, если погуглить можно легко найти уже готовые решения. Я уже озаботился в свое время поиском библиотеки, поэтому сразу даю линк на пост автора – Python Library for Google Search, с примерами и описанием. Библиотека избавляет вас от деталей предоставляя интерфейс позволяющий легко и изящьно работать с выдачей. Просто закиньте содержимое архива в Python\Lib или в папку где находиться ваша программа.
Код шлет запрос к гуглу и выводит в окно Python Shell результаты, обратите внимание на конструкцию try/except – позволит избежать остановки программы в случае ошибки :
from xgoogle.search import GoogleSearch, SearchError
try:
gs = GoogleSearch("hot black chicks", random_agent=True)
gs.results_per_page = 10
results = gs.get_results()
for res in results:
print res.title.encode('utf8')
print res.desc.encode('utf8')
print res.url.encode('utf8')
print
except SearchError, e:
print "Search failed: %s" % e
Количество страниц в индексе гугла для домена определим сформировав запрос вида “site:site_url” и поглядев на кол-во результатов :
def GetGoogleIndex(self, url):
request = 'site:' + url
index = 0
try:
gs = GoogleSearch(request)
gs.results_per_page = 10
results = gs.get_results()
index = gs.num_results
except SearchError, e:
index = -1
print "Search Failed : %s" % e
finally:
print "Index: %d\tURL: %s" % (int(index), url)
return index
С определением PR все непросто, но это не важно, т.к. в интернете несложно найти уже готовый код :
"""
Google Toolbar 3.0.x/4.0.x Pagerank Checksum Algorithm
Author's webpage:
http://pagerank.gamesaga.net/
"""
import sys
import urllib
def IntStr(String, Integer, Factor):
for i in range(len(String)) :
Integer *= Factor
Integer &= 0xFFFFFFFF
Integer += ord(String[i])
return Integer
def HashURL(Str):
C1 = IntStr(Str, 0x1505, 0x21)
C2 = IntStr(Str, 0, 0x1003F)
C1 >>= 2
C1 = ((C1 >> 4) & 0x3FFFFC0) | (C1 & 0x3F)
C1 = ((C1 >> 4) & 0x3FFC00) | (C1 & 0x3FF)
C1 = ((C1 >> 4) & 0x3C000) | (C1 & 0x3FFF)
T1 = (C1 & 0x3C0) << 4
T1 |= C1 & 0x3C
T1 = (T1 << 2) | (C2 & 0xF0F)
T2 = (C1 & 0xFFFFC000) << 4
T2 |= C1 & 0x3C00
T2 = (T2 << 0xA) | (C2 & 0xF0F0000)
return (T1 | T2)
def CheckHash(HashInt):
HashStr = "%u" % (HashInt)
Flag = 0
CheckByte = 0
i = len(HashStr) - 1
while i >= 0:
Byte = int(HashStr[i])
if 1 == (Flag % 2):
Byte *= 2;
Byte = Byte / 10 + Byte % 10
CheckByte += Byte
Flag += 1
i -= 1
CheckByte %= 10
if 0 != CheckByte:
CheckByte = 10 - CheckByte
if 1 == Flag % 2:
if 1 == CheckByte % 2:
CheckByte += 9
CheckByte >>= 1
return '7' + str(CheckByte) + HashStr
def GetGooglePR(URL):
import urllib
hsh = CheckHash(HashURL(URL))
gurl = 'http://www.google.com/search?client=navclient-auto&features=Rank:&q=info:%s&ch=%s' % (urllib.quote(URL), hsh)
f = urllib.urlopen(gurl)
st = f.read()
st = st.lstrip().rstrip()
st = st[9:]
try:
st = int(st)
except:
st = 0
return st
Результаты можно писать в файлы/базу данных SQL/SQLite, но лучше естественно в базу, проще будет делать выборки. Готовый и отлаженный код без проблем переносится на сервер, при желании реализуется многопоточность, но в этом случае скорее всего придеться дрочить гугл через прокси (код библиотеки открыт, как включить прокси смотреть тут и тут)
Posted in Google, Python | 1 Comment »