Help with script
| From: | Erich Kolb | Date: | Fri, 23 Aug 2002 21:45:26 +0000 |
| Subject: | Help with script | ||
| Groups: | php.general | ||
| Request: | Send a blank email to php-general+get-113862@lists.php.net to get a copy of this message | ||
I am trying to write a script that will take a look at the freshmeat.net
database (http://www.freshmeat.net/backend/fm-projects.rdf), parse the file,
and insert it into a MySQL DB. I have already wrote one for slashdot.org
that puts the output into html and displays it in a web browser and it works
fine. I am trying to do the same to start with for freshmeat (I am learning
as I go) but there is nothing displayed on the browser. Can someone help me
out with this?
Here is the code I have written for slashdot:
<?php
$insideitem = false;
$tag = "";
$title = "";
$description = "";
$link = "";
function startElement($parser, $name, $attrs) {
global $insideitem, $tag, $title, $description, $link;
if ($insideitem) {
$tag = $name;
} elseif ($name == "STORY") {
$insideitem = true;
}
}
function endElement($parser, $name) {
global $insideitem, $tag, $title, $description, $link;
if ($name == "STORY") {
printf("<dt><b><a
href='%s'>%s</a></b></dt>",
trim($description),htmlspecialchars(trim($title)));
#printf("<dd>%s</dd>",htmlspecialchars(trim($description)));
$title = "";
$description = "";
$link = "";
$insideitem = false;
}
}
function characterData($parser, $data) {
global $insideitem, $tag, $title, $description, $link;
if ($insideitem) {
switch ($tag) {
case "TITLE":
$title .= $data;
break;
case "URL":
$description .= $data;
break;
}
}
}
$xml_parser = xml_parser_create();
xml_set_element_handler($xml_parser, "startElement", "endElement");
xml_set_character_data_handler($xml_parser, "characterData");
$fp = fopen("http://www.slashdot.org/slashdot.xml","r")
or die("Error reading RSS data.");
while ($data = fread($fp, 4096))
xml_parse($xml_parser, $data, feof($fp))
or die(sprintf("XML error: %s at line %d",
xml_error_string(xml_get_error_code($xml_parser)),
xml_get_current_line_number($xml_parser)));
fclose($fp);
xml_parser_free($xml_parser);
?>
And here is what I have so far for FreshMeat.net. Its pretty much the same,
but the elements are a little different:
<?php
$insideitem = false;
$tag = "";
$project_id = "";
$date_added = "";
$date_updated = "";
$projectname_short = "";
$projectname_full = "";
$desc_short = "";
$desc_full = "";
$url_homepage = "";
function startElement($parser, $name, $attrs){
global $insideitem, $tag, $project_id, $date_added, $date_updated,
$projectname_short, $projectname_full, $desc_short, $desc_full,
$url_homepage;
if($insideitem){
$tag = $name;
}
elseif ($name == "project"){
$insideitem = true;
}
}
function characterData($parser, $data){
global $insideitem, $tag, $project_id, $date_added, $date_updated,
$projectname_short, $projectname_full, $desc_short, $desc_full,
$url_homepage;
if($insideitem){
switch ($tag){
case "project_id":
$project_id .=$data;
break;
case "date_added":
$date_added .=$data;
break;
case "date_updated":
$date_updated .=$data;
break;
case "projectname_short":
$projectname_short .=$data;
break;
case "projectname_full":
$projectname_full .=$data;
break;
case "desc_short":
$desc_short .=$data;
break;
case "desc_full":
$desc_full .=$data;
break;
case "url_homepage":
$url_homepage .=$data;
break;
}
}
}
function endElement($parser, $name){
global $insideitem, $tag, $project_id, $date_added, $date_updated,
$projectname_short, $projectname_full, $desc_short, $desc_full,
$url_homepage;
if ($name =="project"){
echo trim($projectname_full)."\n";
echo trim($url_homepage)."\n";
$projectname_full ="";
$url_homepage ="";
}
}
$xml_parser = xml_parser_create();
xml_set_element_handler($xml_parser, "startElement", "endElement");
xml_set_character_data_handler($xml_parser, "characterData");
$fp = fopen("fm-projects.rdf","r")
or die("Error reading RSS data.");
while ($data = fread($fp, 4096))
xml_parse($xml_parser, $data, feof($fp))
or die(sprintf("XML error: %s at line %d",
xml_error_string(xml_get_error_code($xml_parser)),
xml_get_current_line_number($xml_parser)));
fclose($fp);
xml_parser_free($xml_parser);
?>