Постинг в wordpress.

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)

Заявленные функции :

  • Создание новых постов
  • Редактирование старых
  • Публикация “черновиков” (т.е. ранее сохраненных но неопубликованных)
  • Удаление постов
  • Изменение категорий привязанных к посту
  • Информация по  блогу и пользователям
  • Загрузка мультимедиа файлов (фотографии & видео)
  • Получить последний пост/пинги/трекбэки

Анализ Google SERP на Python

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, но лучше естественно в базу, проще будет делать выборки. Готовый и отлаженный код без проблем переносится на сервер, при желании реализуется многопоточность, но в этом случае скорее всего придеться дрочить гугл через прокси (код библиотеки открыт, как включить прокси смотреть тут и тут)

About Me

Few shit about and url More

Want to subscribe?

 Subscribe in a reader Or, subscribe via email:
Enter your email address:  
Find entries :