Jump to content
php.lv forumi

Rss feeds uz datubāzi


laucinieks

Recommended Posts

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.

Link to comment
Share on other sites

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 by 404
Link to comment
Share on other sites

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.

Link to comment
Share on other sites

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 by 404
Link to comment
Share on other sites

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 by laucinieks
Link to comment
Share on other sites

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 by 404
Link to comment
Share on other sites

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 by laucinieks
Link to comment
Share on other sites

<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 by laucinieks
Link to comment
Share on other sites

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 by laucinieks
Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...
×
×
  • Create New...