Namecheap.com - Cheap domain name registration, renewal and transfers - Free SSL Certificates - Web Hosting

Проверка Google PR на Python

Tuesday, August 31st, 2010

Собственно рабочая функция проверки Google Page Rank :

import urllib, sys

def get_pagerank(url):
    hsh = check_hash(hash_url(url))
    gurl = 'http://www.google.com/search?client=navclient-auto&features=Rank:&q=info:%s&ch=%s' % (urllib.quote(url), hsh)
    try:
        f = urllib.urlopen(gurl)
        rank = f.read().strip()[9:]
    except Exception:
        rank = 'N/A'
    if rank == '':
        rank = '0'
    return rank

def  int_str(string, integer, factor):
    for i in range(len(string)) :
        integer *= factor
        integer &= 0xFFFFFFFF
        integer += ord(string[i])
    return integer

def hash_url(string):
    c1 = int_str(string, 0x1505, 0x21)
    c2 = int_str(string, 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 check_hash(hash_int):
    hash_str = '%u' % (hash_int)
    flag = 0
    check_byte = 0

    i = len(hash_str) - 1
    while i >= 0:
        byte = int(hash_str[i])
        if 1 == (flag % 2):
            byte *= 2;
            byte = byte / 10 + byte % 10
        check_byte += byte
        flag += 1
        i -= 1

    check_byte %= 10
    if 0 != check_byte:
        check_byte = 10 - check_byte
        if 1 == flag % 2:
            if 1 == check_byte % 2:
                check_byte += 9
            check_byte >>= 1

    return '7' + str(check_byte) + hash_str

print get_pagerank("http://twitter.com")

Время выполнения функции python

Monday, June 21st, 2010

Бывает необходимо замерить время выполнения скрипта или функции. Сделать это можно следующим образом :

start = time.time()
function_name()
print "Elapsed Time: %s" % (time.time() - start)

function_name() <<—- функция время выполнения которой нужно замерить

Human Emulator. Подмена страницы

Wednesday, May 5th, 2010

Часто встречаются ресурсы где текст вводится в яваскрипт боксе. Т.е. элемента к которому можно обратиться средствами Human Emulator’а как бы нет. Однако если использовать Firebug можно обнаружить, что набираемый текст появляется внутри каких либо тегов.
Т.е. фактически его можно просто туда вставить, делается это слудующим образом:

/* <div id="test1"><div id="test2"></div></div> */

function str_insert($insertstring, $intostring, $offset) {
   $part1 = substr($intostring, 0, $offset);
   $part2 = substr($intostring, $offset);

   $part1 = $part1 . $insertstring;
   $whole = $part1 . $part2;
   return $whole;
}

$elem = "tst2"
$page = $webpage->get_body();
$pos = strpos($page, $elem);
$page = str_insert("Hello Kitty", $page, $pos + strlen($elem) + 1);
$webpage->set_body ($page);
$browser->wait_for(10,1);

подмена страницы =) Думаю идея понятна.

HumanEmulator. Пишем framework для регистраций.

Monday, May 3rd, 2010

Продолжая монологи про HumanEmulator дам совет о том, как сделать более-менее универсальный шаблон для создания регистраций. Ведь по сути выполняются одни и те же дейсвия : “Зайти сюда, заполнить поля, щелкнуть эту кнопку”. Это естественно касается именно процесса регистрации, далее все равно придется писать код “как положенно”.

	$fields = array(
		"input:name" => $name,
		"input:mail" => $gmail,
		"input:conf_mail" => $gmail,
		"input:profile_url" => "http://google.com",
		"cptch:4" => "recaptcha_response_field", // cptch - image number, value = field name
		"checkbox:og_register[1750]"	=> True,
		"textarea:profile_description"	=> $bio,
		"confirm:button" => "op"
	);

Это что-то вроде правила для заполнения полей. Далее пишем функцию _register() которая заполняет поля форм согласно правилу. Функция естественно “демо”, её задача дать базовое представление о том, как это всё будет работать.

function _register($fields) {
	include("include_all.php");
	foreach ($fields as $key=>$value) {
		$split				= explode(':', $key);
		$param_field		=	$split[0];
		$param_name	= $split[1];
		switch ($param_field)	{
			case "input" :
				$input->set_focus_by_name($param_name);
				$input->set_value_by_name($param_name, $value);
			break;
			case "cptch" :
				$captcha = $app->dlg_captcha_from_image_number($param_name);
				$input->set_focus_by_name($value);
				$input->set_value_by_name($value, $captcha);
			break;
			case "listbox" :
				$list_size		=	$listbox->get_length_by_name($param_name);
				$rnd_elem	= rand(1, $list_size - 1);
				if ($list_size > 50) {
					$rnd_elem = 80;
				}
				$listbox->select_num_value_by_name($param_name, $rnd_elem);
				echo "

\n\n\n";
				echo "List name : $param_name List size : $list_size Elem : $rnd_elem \n\n";
			break;
			case "confirm" :
					switch ($param_name) {
						case "button" :
							$browser->wait(1);
							sleep(rand(1,3));
							$button->click_by_name($value);
						break;
						case "btn" :
							$browser->wait(1);
							sleep(rand(1,3));
							$btn->click_by_number($value);
						break;
					}
			break;
			case "checkbox" :
				$checkbox->click_by_name($param_name);
			break;
			case "textarea" :
				$textarea->set_value_by_name($param_name, $value);
			break;
		}
	}
}

В итоге сам процесс регистрации :

	$browser->navigate($url);
	$browser->wait(1);
	sleep(rand(1,3));

	$anchor->click_by_inner_text("Register", true);

	$browser->wait(rand(2,6));

	_register($fields);

	gmail_confirmer($gmail, $pass, 'http://www.site.com/validate/', "site registration");

Используется функция gmail_confirmer о которой можно прочитать в предыдущей статье посвещянной использованию  HumanEmulator’а.  Весь код как говориться “very basic”, но идею уловить можно и переписать код под свои задачи.

Human Emulator. Автоконфирм e-mail.

Tuesday, April 20th, 2010

Речь пойдет о такой замечательно программе, как Human Emulator. Мне кажется это оптимальное сочетание простоты и скорости написания небольших скриптов с довольно мощьным функционалом. На нем даже можно написать полоноценную спамилку. Вообщем продукт безусловно хороший и полезный, свою стоимость он оправдывает на 100%.

Программировать на Human Emulator – легко, но как всегда есть типовые задачи для которых неплохо было бы иметь сниппеты. Итак сниппет первый – автоконфирмер регистрацый которые приходят на ящик gmail. Суть проста – любой кодер без проблем уловит идею и перепишет как ему нужно.

Вызывается примерно так

gmail_confirmer($gmail, $pass, 'http://............./validate/', "Welcome to site ....");

Как видно 3ий параметр это с чего начинается строчка на которую нужно кликнуть, чтобы подтвердить регистрацию, а 4ый – это заголовок приходящего e-mail.

function gmail_confirmer($usr_mail, $usr_pass, $site_url, $search_str) {
	include("include_all.php");
	init_browser();
	$browser->wait(3);
	sleep(rand(1,3));

	$browser->navigate("gmail.com");

	$browser->wait(2);

	$input->set_focus_by_name("Email");
	$input->set_value_by_name("Email", $usr_mail);
	$browser->wait(2);
	$input->set_focus_by_name("Passwd");
	$input->set_value_by_name("Passwd", $usr_pass);
	$browser->wait(2);

	$button->click_by_name("signIn");
	$browser->wait(rand(2,6));
	$anchor->click_by_inner_text("basic HTML", false);
	$browser->wait(rand(2,6));

	$anchor->click_by_inner_text($search_str, false);

	$browser->wait(rand(2,6));

	$urls	= $anchor->get_all_urls();
	$urls	=	explode("", $urls);

	$url	=	array_find($site_url, $urls);
	//$debug->message_box($url);

	$browser->wait(3);
	$browser->navigate($url);
	$browser->wait(3);
	return true;
}

Несколько пояснений include(“include_all.php”); – для того чотбы без проблем использовать объекты Human Emulator внутри функций. Выглядит файл примерно так :

	// Yo
	global	$browser;
	global	$anchor;
	global	$input;
	global	$listbox;
	global	$button;
	global	$radiobox;
	global	$checkbox;
	global	$debug;
	global	$textarea;
	global	$inputimage;
	global	$captcha;
	global	$webpage;
	global	$app;
	global	$init_browser;
	global	$textfile;
	global	$btn;
	global	$inputfile;
	global	$debug;
	global	$frame;
	global	$form;

init_browser(); – инициализирует браузер. тут можно делать что угодно, очищать куки, делать рефреш.

My blog is Do-Follow


Пишу код, делаю сайты.
Check out my about.me profile!

парсинг сайтов, форумов, интернет магазинов

Want to subscribe?

istinspring twitter account
istinspring facebook account

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