laucinieks Posted September 22, 2011 Report Share Posted September 22, 2011 (edited) Sveiki, Vai ir kaut kāda informācija, kā panākt, ka no RSS feeda pārkopē informāciju uz datubāzi? L. Edited September 22, 2011 by laucinieks Quote Link to comment Share on other sites More sharing options...
briedis Posted September 22, 2011 Report Share Posted September 22, 2011 (edited) Duh, nopārsē to xml'u un saliec datubāzē, kaut vai ar SimpleXML Edited September 22, 2011 by briedis Quote Link to comment Share on other sites More sharing options...
laucinieks Posted September 22, 2011 Author Report Share Posted September 22, 2011 Hmm, skaidrs :), paldies! Bet tagad, rodas jautājums, kā īsti ir, ja RSS feedam ir bijusi citi datubāzes tabulas nosaukumi un citi lauki, kā, viņus var pārveidot? Pieņemsim ,es gribu no lapas A. pārkopēt visus sludinājumus uz lapu B., bet lapas A. sludinājumu datubāzes tabulas atšķiras no lapas B. sludinājumu datubāzes tabulas. Ceru, ka varēsiet palīdzēt! L. Quote Link to comment Share on other sites More sharing options...
rATRIJS Posted September 22, 2011 Report Share Posted September 22, 2011 Kaads sakars RSS laukiem ar tavas datubaazes laukiem? RSS ir viens standarts. Kaa tu vinju noparsee un izmanto ir atkariigs no tevis. Quote Link to comment Share on other sites More sharing options...
404 Posted September 22, 2011 Report Share Posted September 22, 2011 (edited) Vienkāršākais variants varētu būt ielasīt XML'u masīvā,samainīt tajā atslēgas atbilstoši tavu tabulu kolonnu nosaukumiem,un padot funkcijai,kura no šī masīva pēc atslēgām uzģenerē viņas insertam kaut vai šādi: public function arrayToQueryString($arr) { $sqlstr = ''; foreach($arr as $key => $value) { $sqlstr .= $key . '=\''.$value.'\','; } if ($sqlstr !== '') { $sqlstr = substr($sqlstr, 0, -1); } return $sqlstr; } Edited September 22, 2011 by 404 Quote Link to comment Share on other sites More sharing options...
laucinieks Posted September 24, 2011 Author Report Share Posted September 24, 2011 Tātad, tagad skatos par to .xml . Tur ir <description> lauks un man vajadzētu izvilkt piemēram vienu rindu no tā description lauka. Ir tas kaut kā iespējams? Jo <description> laukā ir 3 daļas - autors, laiks un apraksts, man vajadzētu katru no tām daļām ievietot attiecīgajās tabulās datubāzē - "author", "time" un "description". L. Quote Link to comment Share on other sites More sharing options...
404 Posted September 24, 2011 Report Share Posted September 24, 2011 (edited) Aptuvenais algoritms varētu būt šāds: - Atveram Brieža iepriekš iedoto linku par SimpleXML - Ja izskatās biedējoši,ierakstām googlē "SimpleXML tutorial" - Ņemam pirmo rezultātu - Saskaņā ar uzzināto,jāuzraksta nedaudz koda: Pēc tava apraksta pieņemot ka XML varētu būt kas tamlīdzīgs: <messages> <message> <author>Laucinieks</author> <time>September 23, 2011</time> <description>Kā ielasīt XML?</description> </message> <message> <author>404</author> <time>September 24, 2011</time> <description>Lasot piemērus</description> </message> </messages> tad $file = 'mans.xml'; // Fails,kuru vajag ielasīt $xml = simplexml_load_file($file); // Likt parserim ielasīt faila saturu objektā if (count($xml->message) > 0) { // Ja ir ziņas /* Ciklā izejam cauri blokam lai iegūtu elementus */ foreach ($xml->message as $node) { $author = $node->author; $time = $node->time; $description = $node->description; echo 'Autors: ' . $author . ' Laiks: ' . $time . ' Apraksts: ' .$description . '<hr/>'; // Tālāk nevajadzētu būt problēmām insertu uzrakstīt } } Edit: šitais foruma variants kaut kā nograuj koda formatējumu.Slinkums pareizi atkāpes labot. Edited September 24, 2011 by 404 Quote Link to comment Share on other sites More sharing options...
laucinieks Posted September 24, 2011 Author Report Share Posted September 24, 2011 (edited) Nu tas ir amzliet savādāk, tātad ir šāds RSS - <item> <title>Piedāvā darbu - Asistents</title> <link>http://www.zip.lv/show/?r=1874533</link> <guid>http://www.zip.lv/show/?r=1874533</guid> <pubDate>Sat, 24 Sep 2011 16:28:52 +0300</pubDate> <description><![CDATA[<p><b>Piedāvā darbu - Asistents</b><br /><b>Rīga</b><br /></p><p>Piedāvāju elastīgu un interesantu asistentes darbu draudzīgā kolektīvā, ar profesionālās izaugsmes i...</p><p><b><a href="http://www.zip.lv/show/?r=1874533">Apskatīt sludinājumu »</a></b>]]></description> </item> Vajag izvilkt tādus datus - (Title, kuru ņems par kategorijas nosaukumu (izdaru bez problēmām, description bez rīga un Piedāvā darbu - Asistents (šeit sākas problēma, kā to izdarīt), linku - (bez problēmām) un atrašanās vietu no description (atkal ir problēma.) Katru no šiem pēctam vajadzēs insertot 4 tabulaš - Title, description, Link un City. Cerams sapratāt, ko domāju, L. Edited September 24, 2011 by laucinieks Quote Link to comment Share on other sites More sharing options...
404 Posted September 24, 2011 Report Share Posted September 24, 2011 (edited) Lai aizvāktu CDATA,tad var uzdot LIBXML_NOCDATA parametru: $xml = simplexml_load_file($file, LIBXML_NOCDATA); Bet ja vajag vēl description saturu sadalīt,tad tur varianti ir vairāki. Kaut vai ar explode samest masīvā (ņemot <br/> par delimiteri) un liekos tagus nodzēst ar strip_tags() Edited September 24, 2011 by 404 Quote Link to comment Share on other sites More sharing options...
laucinieks Posted September 24, 2011 Author Report Share Posted September 24, 2011 (edited) Tātad, jau izmantoju xml_regex veidu, ko biju iesācis, ar explode viss sanāca :), bet tie cdata traucē - $xml = file_get_contents('http://www.zip.lv/rss/'); include 'xml_regex.php'; $news_items = element_set('item', $xml); Tāda ir ievadīšana, kā regex'am var nonēmt CDATA nost? Pašlaik atradu risinājumu ar str_replace, nezinu cik tas labs, bet nu vismaz strādā :). L. Edited September 24, 2011 by laucinieks Quote Link to comment Share on other sites More sharing options...
laucinieks Posted September 25, 2011 Author Report Share Posted September 25, 2011 (edited) <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> <?php $xml = file_get_contents('rss-fails'); include 'xml_regex.php'; $news_items = element_set('item', $xml); foreach($news_items as $item) { $description = value_in('description', $item); $zip_array = explode('<br />', $description); $title = str_replace('Meklē', '', strip_tags($zip_array[0])); $title = str_replace(' - ', '', $title); if (isset($zip_array[2])) { $city = $zip_array[1]; } else { $city = '<strong>Nav norādīts</strong>!'; } if (isset($zip_array[2])) { $message = str_replace(']]>', '', $zip_array[2]); } else { $message = str_replace(']]>', '', $zip_array[1]); } $url = "<a href='http://zip.lv' target='_blank'>zip.lv</a>"; echo '<strong>'.$title.'</strong><br />'; echo '<font color="orange">'.$city.'</font><br />'; echo $message.'<br />'; echo $url.'<br /><br />'; if ($title == 'Grāmatvedis' || $title == 'Grāmatveža palīgs') { echo '+1'; } } ?> Tātad man kaut kā nereaģē uz if'u, kaut vai title tur ir identiski tam, bet nu tāpat neuzliek +1. Kur varētu būt problēma? EDIT: Problēma atrisināta. L. Edited September 25, 2011 by laucinieks Quote Link to comment Share on other sites More sharing options...
laucinieks Posted September 26, 2011 Author Report Share Posted September 26, 2011 (edited) Tātad, saskāros ar vēl vienu problēmu. Ir RSS feeds, kurā title tagā ir ieliktas bildes un linki, ar strip_tags noņēmu visu lieko, un tagad gribu ar ifu salīdzināt vai ir vienāds, bet problēma ir tāda, visiem tiem, kuriem ir bildes un a tags, if's neizpildās (it kā būtu title palicis tukšums). Vai ir kāda iespēja if ielikt LIKE? Piem if ($name == "%Janis%") ? EDIT: Izlaboju ar ltrim() ;)! L. Edited September 26, 2011 by laucinieks Quote Link to comment Share on other sites More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.