написать парсилку всех обьяв подряд вроде как получается (плюс есть где посмотреть), Подскажите слева есть возможность сортировать автомобили по марке , при нажатии на марку аяксом подгружаются обьявления.
не могу понять как же спарсить все обьявы по маркам авто .....
нужен просто совет на конкретном примере .... Буду очень благодарен.
Спасибо !
Спустя 11 часов, 48 минут, 9 секунд (26.07.2011 - 13:23) Winston написал(а):
Спустя 8 часов, 52 минуты, 25 секунд (26.07.2011 - 22:15) to0n1 написал(а):
Спасибо за ссылку ! Я знаю как устроен аякс поиск .... мое решение курлом отсылать пост запрос (имитация нажатия на аяксовую ссылку) и парсить ответ ! Но ответ от сервера там в какой то странной форме (файрбагом смотрел) . Если есть свободная минутка гляньте пожалуйста! Может вы знаете как разобрать ответ от сервера !
Спустя 1 час, 29 минут, 5 секунд (26.07.2011 - 23:44) to0n1 написал(а):
Вот доработанный код который парсит все объявления в один массив...
Ума не приложу как разбить его по маркам авто ....
Да еще хотелось бы и картинки парсить ...
Ума не приложу как разбить его по маркам авто ....
Да еще хотелось бы и картинки парсить ...
<?
function logging($msg) {
global $HTTP_X_FORWARDED_FOR, $REMOTE_ADDR;
global $curr_dir;
$log_file = "$curr_dir/mymail.log.txt";
echo $msg;
if (!file_exists($log_file)) {
$fp = @fopen($log_file, "a+");
fclose($fp);
}
$fp = @fopen($log_file, "r");
if ($fp !== false) {
$fp = @fopen($log_file, "a+");
fwrite($fp, $msg);
fclose($fp);
}
}
function func_flush($s = NULL) {
if (preg_match("/Apache(.*)Win/S", getenv("SERVER_SOFTWARE")))
echo str_repeat(" ", 2500);
elseif (preg_match("/(.*)MSIE(.*)\)$/S", getenv("HTTP_USER_AGENT")))
echo str_repeat(" ", 256);
if (function_exists('ob_flush')) {
ob_flush();
}
else {
if (ob_get_length() !== FALSE)
ob_end_flush();
}
flush();
}
function db_fetch_array($result, $flag=MYSQL_ASSOC) {
return mysql_fetch_array($result, $flag);
}
function db_free_result($result) {
@mysql_free_result($result);
}
function func_query($query) {
$result = false;
if ($p_result = mysql_query($query)) {
while ($arr = db_fetch_array($p_result))
$result[] = $arr;
db_free_result($p_result);
}
return $result;
}
function alias($name) {
$niddle = array("/а/", "/б/", "/в/", "/г/", "/д/", "/е/", "/ё/", "/ж/", "/з/", "/и/", "/й/", "/к/", "/л/", "/м/", "/н/",
"/о/", "/п/", "/р/", "/с/", "/т/", "/у/", "/ф/", "/х/", "/ц/", "/ч/", "/ш/", "/щ/", "/ъ/", "/ы/", "/ь/", "/э/", "/ю/", "/я/",
"/А/", "/Б/", "/В/", "/Г/", "/Д/", "/Е/", "/Ё/", "/Ж/", "/З/", "/И/", "/Й/", "/К/", "/Л/", "/М/", "/Н/",
"/О/", "/П/", "/Р/", "/С/", "/Т/", "/У/", "/Ф/", "/Х/", "/Ц/", "/Ч/", "/Ш/", "/Щ/", "/Ъ/", "/Ы/", "/Ь/", "/Э/", "/Ю/", "/Я/");
$replace = array("a", "b", "v", "g", "d", "e", "yo", "zh", "z", "i", "j", "k", "l", "m", "n", "o", "p",
"r", "s", "t", "u", "f", "h", "c", "ch", "sh", "sch", "", "y", "'", "e", "yu", "ya",
"A", "B", "V", "G", "D", "E", "YO", "ZH", "Z", "I", "J", "K", "L", "M", "N", "O", "P",
"R", "S", "T", "U", "F", "H", "C", "CH", "SH", "SCH", "", "Y", "'", "E", "YU", "YA");
$alias = preg_replace($niddle, $replace, $name);
$alias = strtolower(preg_replace('#[^a-z0-9- ]#Uusi','',$alias));
$alias = preg_replace('#[ ]#Uusi','-',$alias);
return $alias;
}
function __curl_headers() {
static $headers = "";
$args = func_get_args();
if (count($args) == 1) {
$return = "";
if ($args[0] == true) $return = $headers;
$headers = "";
return $return;
}
if (trim($args[1]) != "") $headers .= $args[1];
return strlen($args[1]);
}
function func_http_request($method, $url, $cookie="", $data="", $join="&", $conttype="", $referer="", $cert="", $kcert="", $headers="", $timeout = 0)
{
if ($headers != '') {
$_headers = array();
foreach($headers as $k=>$v) {
$_headers[] = is_integer($k) ? $v : ($k.": ".$v);
}
$headers = $_headers;
unset($_headers);
}
$headers[] = "User-Agent: Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US; rv:1.9.2.12) Gecko/20101026 Firefox/3.6.1";
$supports_insecure = false;
$ch = curl_init();
curl_setopt ($ch, CURLOPT_URL, $url);
if( $referer ) curl_setopt ($ch, CURLOPT_REFERER, $referer);
curl_setopt ($ch, CURLOPT_HEADER, 0);
curl_setopt ($ch, CURLOPT_HTTPHEADER, $headers);
if( $cert ){
curl_setopt ($ch, CURLOPT_SSLCERT, $cert);
if( $kcert ) curl_setopt ($ch, CURLOPT_SSLKEY, $kcert);
}
if (!empty($cookie)) {
curl_setopt ($ch, CURLOPT_COOKIE, $cookie);
}
$timeout = abs(intval($timeout));
if (!empty($timeout)) {
curl_setopt ($ch, CURLOPT_TIMEOUT, $timeout);
}
if ($supports_insecure) {
curl_setopt ($ch, CURLOPT_SSL_VERIFYPEER, 0);
curl_setopt ($ch, CURLOPT_SSL_VERIFYHOST, 1);
}
if( $method == 'GET' )
curl_setopt ($ch, CURLOPT_HTTPGET, 1);
else {
curl_setopt ($ch, CURLOPT_POST, 1);
if($data) {
if($join){
foreach($data as $k=>$v){
list($a,$b) = split("=",trim($v),2);
$data[$k]=$a."=".urlencode($b);
}
}
curl_setopt ($ch, CURLOPT_POSTFIELDS, join($join,$data));
}
}
curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt ($ch, CURLOPT_HEADERFUNCTION, "__curl_headers");
__curl_headers(false);
$body = curl_exec ($ch);
$errno = curl_errno ($ch); $error = curl_error($ch);
curl_close ($ch);
return array(__curl_headers(true), $body);
}
header("Content-Type: text/html;charset=utf-8");
set_time_limit('36000000');
$categories = array(
'378' => 'Транспорт'
);
$site = 'http://tambov.olx.ru/cat-';
$adnum = @intval($_GET['adnum']);
$cat = 378;
#$cat = 190;
if (!$adnum)
$adnum = 50;
$live_adnum = 0;
$pages = ceil($adnum / 50);
$ads = array();
$hour_diff = 3;
if (array_key_exists($cat, $categories)) {
$ads = array();
for ($page=1; $page <= $pages; $page++) {
if ($page > 1)
$url = $site.$cat."-p-$page";
else
$url = $site.$cat;
list($headers,$ads_page) = func_http_request('GET', $url);
if (preg_match_all('#<h3>\s+<a\s+href="(.*)"\s+title="(.*)">\s+([^\s].*)\s+</a>\s+</h3>#Usi',$ads_page,$matches)) {
/* if (preg_match('#<h1 id="header_keywords">\s*<strong>(.*)\s-\sТамбов</strong>\s*</h1>#Usi',$ads_page,$main_cat)) {
$main_cat = $main_cat[1];
} else {
$main_cat = '';
}*/
$main_cat = $categories[$cat];
foreach ($matches[1] as $k => $ad_url) {
$ad_title = $matches[3][$k];
list($headers,$ad_page) = func_http_request('GET', $ad_url);
if (preg_match('#<div id="item-data">\s+<ul class="[^"]*">(.*)</ul>\s+</div>#Usi',$ad_page,$item_data))
$item_data = $item_data[1];
else
$item_data = '';
if (preg_match('#<a [^>]*id="firstpath2"[^>]*>(.*)</a>#Usi',$ad_page,$category))
$category = $category[1];
else
$category = '';
if (preg_match('#<div id="description-text">\s+(?:<p>)?(.*)(?:</p>)?\s+</div>#Usi',$ad_page,$item_desc))
$item_desc = $item_desc[1];
else
$item_desc = '';
if (preg_match_all('#<li>\s*(.*):\s*<strong[^>]*>\s*(.*)\s*</strong>\s*</li>#Usi',$item_data,$item_data_array)) {
array_shift($item_data_array);
foreach ($item_data_array as $z => $itmdata)
array_shift($item_data_array[$z]);
$item_data = $item_data_array;
$item_data_string = implode(' ',$item_data[0]);
} else {
$item_data = '';
$item_data_string = $item_data;
}
if ( preg_match('#телефон#Usi',$item_data_string,$tmp) ||
preg_match('#8(\s|-|\(|\))*9(\s|-|\(|\))*(\d(\s|-|\(|\))*){9}#Usi',$item_desc,$tmp) ||
preg_match("/([\d\w](?:[-!#\$%&'*+.\\/\d=?A-Z^_`a-z{|}~]*[\d\w])?@([-!#\$%&'*+\\/\d=?A-Z^_`a-z{|}~]+\\.)+[a-zA-Z]{2,6})/Uusi",$item_desc,$tmp)) {
$temp = preg_replace('#<a class="[^"]*" href="[^"]*"\s*>(.*)</a>#U', "$1", $item_desc);
$ads[] = array($ad_title.', ', $category, $item_data, $temp);
$live_adnum++;
if ($live_adnum >= $adnum)
break 2;
}
}
}
if (($live_adnum < $adnum) && ($page == $pages)) {
$pages++;
}
}
} else
DIE('Invalid cat ID');
print_r($ads);
Спустя 17 часов, 25 минут, 10 секунд (27.07.2011 - 17:09) Winston написал(а):
to0n1
За 30$ могу сделать.
За 30$ могу сделать.
Спустя 1 день, 4 часа, 33 минуты, 44 секунды (28.07.2011 - 21:43) to0n1 написал(а):
Да знаеш за $ я могу на фрилансе заказать ! Я сам делаю его и мне главное опыт ! Я же не прошу чтото писать за меня ! Я сейчас понимаю что при запросе аяксом (ссылку я уже получил с файрбага) сервер отвечает данными JSON моя задача их распарсить в массив. Мне нужно что собственно сделать : получить данные по каждой марке в массивы ... проверить id последнего обьявления в моей базе и выбрать только новые обьявления .... закинуть их в базу ... потомом выбираю ссылки на фото и скачиваю их на сервер ... вроде так ...
Мне просто нужно помоч элементарными примерами или пинком в какую сторону копать ! Сейчас рою мануал на предмет распознавания json ! Буду благодарен любому содействию !
Мне просто нужно помоч элементарными примерами или пинком в какую сторону копать ! Сейчас рою мануал на предмет распознавания json ! Буду благодарен любому содействию !
Спустя 35 минут, 59 секунд (28.07.2011 - 22:19) killer8080 написал(а):
Цитата (to0n1 @ 28.07.2011 - 21:43) |
Сейчас рою мануал на предмет распознавания json ! Буду благодарен любому содействию ! |
копай здесь :)
PS а что это за фигня?
if (!file_exists($log_file)) {может проще использовать file_put_contents() ?
$fp = @fopen($log_file, "a+");
fclose($fp);
}
$fp = @fopen($log_file, "r");
if ($fp !== false) {
$fp = @fopen($log_file, "a+");
fwrite($fp, $msg);
fclose($fp);
}
Спустя 47 минут, 45 секунд (28.07.2011 - 23:07) to0n1 написал(а):
Цитата |
PS а что это за фигня? |
Да возможно Вы правы ! Но то что написал первое что пришло в голову !
JSON декодировал получил объект и описание ... дальше вроде осталось просто разобрать ....
но вот есть вопросы не решенные по поводу
JSON декодировал получил объект и описание ... дальше вроде осталось просто разобрать ....
но вот есть вопросы не решенные по поводу
Цитата |
Мне нужно что собственно сделать : получить данные по каждой марке в массивы ... проверить id последнего обьявления в моей базе и выбрать только новые обьявления .... закинуть их в базу .. |