Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > PHP: Общие вопросы > Как проверить запись в бд


Автор: Silent_s 23.10.2008, 21:21
К примеру есть у нас сайт с которого парсером мы берем инфу и записываем в бд, сайт постоянно обновляется и как сделать так что бы он перед записью в бд он проверял есть ли такая запись или нет, если есть такая запись то прекращать парсинг.

Автор: awers 23.10.2008, 21:56
Код

select * from 
 ?

Автор: Silent_s 23.10.2008, 22:29
по подробней плиз

Автор: awers 23.10.2008, 22:30
 smile  телепатические способности видения чужих БД отключены за неуплату

Автор: Andres 23.10.2008, 22:44
А че тут можно подробней. Телепатов реально нет. Но может так понятней будет.
Код

select * from table where text='текст из парсера'

Автор: skyboy 23.10.2008, 22:45
Silent_s, твоя проблема в том, что ты не умеешь задавать вопрсы. вот, что такое "проверить запись в БД"? ничего не понятно. то ли тебя количество записей интересует, то ли наличие конкретного значения. а вот если поставить вопрос по-другому: "как проверить наличие определенных данных в БД, которые я же сам и записал?", то уже пойдут встречные наводящие вопросы: если ты сам записываешь данные и знаешь их структуру, то кто, кроме тебя, поможет тебе найти определенные данные? и что тебе мешает это сделать?

Добавлено через 56 секунд
может, договориться с владельцем сайта, чтоб данные отдавались непосредственно в XML с меткой последнего обновления?

Автор: Andres 23.10.2008, 22:49
Цитата(skyboy @  23.10.2008,  22:45 Найти цитируемый пост)
может, договориться с владельцем сайта, чтоб данные отдавались непосредственно в XML с меткой последнего обновления? 
А может там еще и дата на странице которую парсит есть smile

Автор: Silent_s 23.10.2008, 23:08
Да
skyboy, да ты прав я реально вопросы плохо умею задавать, но к счастью всегда находились такие люди как ты и помагали!=)

Andres, поговорив со знакомым кодером я тоже пришел к такому решению, но спасибо=)
Вроде все так просто удивляюсь почему сам не додумался... наверное моск автоматически отрубается ведь парсер написал осталась только эта фича чтобы ее на крон поставить и забыть.
Ну и в конце хотелось бы критики и по больше, можете и с матом=)
Буду рад любой критике вот это мой парсер
Код

set_time_limit(0);
for($s = 2;$s <= 10; $s++){
$site[$s] = $s;
$adres = file_get_contents('http://сайт_который_парсю.com/'.$site[$s]);
preg_match_all('|<h3><a.* href=(.*)>(.*)</a></h3>|U', $adres, $mathesname);
preg_match_all('/<p>(.*)<\/p>/',$adres,$mathesdesc);
preg_match_all('/\/images\/icons\/([0-9]+)\/([0-9]+\.jpg)/',$adres,$mathesimg);
preg_match_all('/price">(.*)<span class="cents">/',$adres,$mathesprise);
preg_match_all('/cents">(.*)<\/span>/',$adres,$cent);
preg_match_all('/<\/span><a.* href=(.*)>(.*)<\/a><\/div>/',$adres,$priselink);
preg_match_all('/category">(.*)<\/div>/',$adres,$mathescat);
$namearray = $mathesname[2];
$decsarray = $mathesdesc[1];
$id_cat = $mathesimg[1];
$id_icon = $mathesimg[2];
$prisearr = $mathesprise[1];
$prisecent = $cent[1];
$catarr = $mathescat[1];
$prlink = $priselink[1];
$date=date("Y-m-d h:i:s");
for($i=0,$ind=0;$i < count($namearray) && count($decsarray) && count($id_icon) && count($prisearr) && count($prisecent) && count($prlink) && count($catarr),$ind < 20;$i++,$ind++){
        $val[$ind]=$ind;
        $fh = fopen($id_icon[$i], 'w');
        $img = file_get_contents('http://сайт_который_парсю.com/images/icons/'.$id_cat[$i].'/'.$id_icon[$i]);
        $fw = fwrite($fh, $img);
        if ($prisearr[$i]){
        $prisearr[$i].='.';
        }
        mysql_query("INSERT INTO `wp_posts`
        (`post_date`,`post_author`,`post_title`,`post_content`,`post_parent`)
        VALUES ('".$date."',1,'".$namearray[$i]."','<img src=http://мой_сайт.ru/wp-content/uploads/2008/10/$id_icon[$i] hspace=10 align=left>$decsarray[$i]
        <strong> цена: $prisearr[$i] $prisecent[$i] <a href=$prlink[$i]>купить</a></strong>','".$val[$ind]."');");
        //тут условия типа
                     if (($catarr[$i])=='Photography'){
            mysql_query("INSERT INTO `wp_term_relationships`
            (`object_id`,`term_taxonomy_id`)
            VALUES ('".mysql_insert_id()."',14);");
            }
                // категорий куча и поэтому код не много обрезаю
        mysql_query("INSERT INTO `wp_term_relationships`
            (`object_id`,`term_taxonomy_id`)
            VALUES ('".mysql_insert_id()."',1);");
        
        
        mysql_query("INSERT INTO `wp_posts`
        (`post_date`,`post_author`,`post_title`,`post_parent`,`post_type`,`guid`,`post_mime_type`,`post_status`)
        VALUES ('".$date."',1,'".$id_icon[$i]."','".$val[$ind]."','attachment','http://мой_сайт.ru/wp-content/uploads/2008/10/$id_icon[$i]','image/jpeg','inherit');");
        
            fclose($fh);
            }
}

Автор: awers 23.10.2008, 23:11
ну если можно критику, да еще и с матом, то можно мат и не углубляться в критику

[мат за кадром....]

Автор: Silent_s 23.10.2008, 23:12
Так ну и вкратце расскажу что я делаю, вначале делаю цикл где указываю с какой по какую страницу парсить далее на этой странице вытаскиваю данные которые мне нужны, название, описание, картинку, с ценой там особый случай, и кто внимательный заметил что все это дело запихиваю в бд вордпресса, первым запросом я вставляю про парсенные данные вторым указываю категорию тут я условия убрал так как много категорий, третьим запросом вставляю имя и адрес картинки, так уж у вп принято!

Добавлено через 2 минуты и 3 секунды
Я знаю что все ужасно=)
Мне до вас расти и расти!
Но я постоянно совершенствуюсь, стараюсь, правда!=)

Автор: awers 23.10.2008, 23:15
Вообще все приходит со временем. Если тебя самого устраивает то как работает твое творение и тем более если оно работает - то все норм. Дальше практика и практика. Смысла тыкать во что то носом, а тем более перепроверять чужой код после рабочего дня над другими проектами - на горю желаением )

Автор: Silent_s 23.10.2008, 23:23
ясно, ну может будет время все таки глянули бы, оч хотел бы услышать джедайскую критику и сказать где я допускаю глобальные ошибки, кстати, скрипт полностью рабочий единственная проблема во вложенности цикла когда я добавляю запись в бд сначала добавляется запись, потом картинка и в бд присваиваться им один парент ид и он только до 20 так как количество записей на одной странице 20 далее все идет сначала, а мне бы желательно продолжать до столько сколько страниц парсю, если ставлю больше то не работает, если кто дейсвительно желает помочь, то могу показать бд и сайты куда парсю и откуда.

Автор: awers 23.10.2008, 23:24
ну если ты расчитываешь на чью либо помощь, то тебе неприменно надо показать структуру базы и адрес откуда тащишь ..

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)