Анализ конкурентности. Нужны советы.

Статус
В этой теме нельзя размещать новые ответы.

Юрец

Постоялец
Регистрация
20 Авг 2006
Сообщения
143
Реакции
26
Ниже код скрипта.

что делает:
-Считывает построчно(предварительно залитый) файл keys.txt (список кивордов)

-из каждой строки формирует запрос:
google.com/search?q=KEYWORD&gl=us&hl=en

-затем, из строки "Results 1 - 100 of about 16,000" парсит цифру 16,000
и так, для каждого киворда.

-сохраняет ризалт в файл keys-r.html
template.html используется при этом как шаблон для вывода ризалтов парсинга.

Таймаут прописывается руками внутри скрипта.
Скрипт написан для использования на сервере с пхп4.
За скрипт отдал 10 баксов.


PHP:
<?php
define("KEY_LIST_FILE", "keys.txt");
define("RESULT_FILE", substr(KEY_LIST_FILE,0,-4) . "-r.html");
$data = file_get_contents(KEY_LIST_FILE);
$result = array();
foreach (explode("\n", $data) as $KEY) {
	$KEY = trim($KEY);
	$q = "http://google.com/search?q=" . urlencode($KEY) . "&gl=us&hl=en";
	$googleData = file_get_contents($q);
	$regexp = '#<p>&nbsp;Results <b>\d+</b> - <b>\d+</b> of about <b>(.+)</b>#Uis';
	$value = array();
	preg_match_all($regexp, $googleData, $value);
	if (!empty($value[1][0]))
		$result[] = array($KEY, $value[1][0]);
	sleep(5);
}
if (!function_exists('file_put_contents')) {
	define('FILE_APPEND', 0);
	function file_put_contents($n, $d, $flag = false) {
	    $mode = ($flag == FILE_APPEND || strtoupper($flag) == 'FILE_APPEND') ? 'a' : 'w';
	    $f = @fopen($n, $mode);
	    if ($f === false) {
	        return 0;
	    } else {
	        if (is_array($d)) $d = implode($d);
	        $bytes_written = fwrite($f, $d);
	        fclose($f);
	        return $bytes_written;
	    }
	}
}
function generateHTMLFile($data = array()) {
	if (empty($data) or !is_array($data))
		return false;
	$htmlString = '';
	foreach ($data as $val) {
		$htmlString .= "<tr id=\"result\"><td>{$val[0]}</td><td>{$val[1]}</td></tr>\n";
	}
	$result = preg_replace('#<tr id="result"><td>.+</td><td>.+</td></tr>#Uis', $htmlString, file_get_contents("template.htm"));
	file_put_contents(RESULT_FILE, $result);
}

generateHTMLFile($result);
?>

Вопросы кодерам:
Вы считаете этот код грамотным?

Нужно ли для такой задачи использовать прокси или хватит таймаута в 3-10 сек?

Возможно ли сделать его быстрым?
Просто иногда пачка кивордов по 2000 строк бывает...

Может кто поможет довести до ума?
Ну и выложим тут в паблик :az:

Юзабилити, согласен = 0, но это мелочь, можно быстро поправить
 
не сказал бы, что код хреновый, но лично яб, некоторые моменты сделал по другому:

PHP:
$data = file_get_contents(KEY_LIST_FILE); 
foreach (explode("\n", $data) as $KEY) {

я бы заменил на

PHP:
$data = file(KEY_LIST_FILE);


PHP:
$googleData = file_get_contents($q);

заменил бы на сокеты(скорее всего на курл, мне он нравится больше, да и при личном тестинге он работал побыстрее чем sockopen)

PHP:
 $regexp = '#<p>&nbsp;Results <b>\d+</b> - <b>\d+</b> of about <b>(.+)</b>#Uis';
preg_match_all($regexp, $googleData, $value);

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

хотя бы до такого(если что, можно подточить)

PHP:
preg_match('%</b> of about <b>(.*?)</b>%i', $googleData, $value);


ну вывод полностью какой-то тупой, какие-то прег-реплейсы, выдергивание, вызов функции file_put_contents(открытие файла, проверка, запись, закрытие) НА КАЖДОЙ ИТЕРАЦИИ!!!

вот это реально нагружает,

вначале скрипта делает fopen с проверкой

а в цикле уже юзаем fwrite
 
Ловите.

Обратился к SolutionFix. За небольшую доплату человек дописал свою софтину bidcheck под мои нужды:

PHP:
-из каждой строки формирует запрос:
google.com/search?q=KEYWORD&gl=us&hl=en

-затем, из строки "Results 1 - 100 of about 16,000" парсит цифру 16,000
и так, для каждого киворда.

Вобщем заходите в settings прописываете доп. параметры в УРЛ к гуглу и наслаждаетесь.
Если нужно поменять параметры (hl ; gl ; etc.) то закрываете прогу, изменяете параметры и снова запускаете.

*тему можно закрыть, в принципе
 
Статус
В этой теме нельзя размещать новые ответы.
Назад
Сверху