Wie man schon einmal beobachten konnte, habe ich nun auch meine delicious Links in meinem Blog. Allerdings werden die Links nur jede Woche angezeigt. Dazu habe ich selber ein kleines Script geschrieben.
Das Script wird täglich durch einen Cronjob aufgerufen und liest die Links aus dem RSS Feed von delicious und schreibt sie in eine Datenbank. Dort werden sie aufbewahrt, bis sie von einem anderen Script ausgelesen und auf die Webseite geschreiben werden. Das passiert bei mir wöchentlich.
Für die Technik-Interessierten habe ich hier die Datenbankstruktur und den Code des Scriptes, welches die Links ausliest. Das schreiben der Links in den Blog sollte ja nicht so schwierig sein.
Bei Gelegenheit werde ich die Daten nicht mehr aus dem Feed, sondern aus der API nehmen. Aber so funktionierts ja auch.
Ach ja: Das Script verwendet MagpieRSS um die RSS Datei zu parsen.
Die Tabellenstruktur
Der PHP Code
Dieses Script kann, wenn die Zugriffsrechte korrekt gesetzt sind, über die Shell aufgerufen werden.
Verbesserungsvorschläge sind gerne Willkommen
Das Script wird täglich durch einen Cronjob aufgerufen und liest die Links aus dem RSS Feed von delicious und schreibt sie in eine Datenbank. Dort werden sie aufbewahrt, bis sie von einem anderen Script ausgelesen und auf die Webseite geschreiben werden. Das passiert bei mir wöchentlich.
Für die Technik-Interessierten habe ich hier die Datenbankstruktur und den Code des Scriptes, welches die Links ausliest. Das schreiben der Links in den Blog sollte ja nicht so schwierig sein.
Bei Gelegenheit werde ich die Daten nicht mehr aus dem Feed, sondern aus der API nehmen. Aber so funktionierts ja auch.
Ach ja: Das Script verwendet MagpieRSS um die RSS Datei zu parsen.
Die Tabellenstruktur
mysql> describe delicious; +----------------+--------------+------+-----+---------+----------------+ | Field | Type | Null | Key | Default | Extra | +----------------+--------------+------+-----+---------+----------------+ | delID | int(11) | | PRI | NULL | auto_increment | | delTitle | varchar(200) | | | | | | delLink | varchar(200) | | | | | | delTags | varchar(200) | | | | | | delDescription | text | | | | | | delLang | char(2) | | | | | | delDate | int(11) | | | 0 | | | delActive | tinyint(4) | | | 0 | | +----------------+--------------+------+-----+---------+----------------+Wenn delActive auf 1 ist, bedeutet das, dass der Link schon auf der Homepage angezeigt wird.
Der PHP Code
#!/usr/bin/php
<?
// abstand machen, damits auch schoen aussieht
function space($lenght)
{
$count=100-$lenght;
for($i=0;$i<$count;$i++)
{
echo " ";
}
}
// alle klassen, funktionen usw einbinden
require_once("/home/t-error/public_html/includes/_head.inc.php");
// magpie einbinden
require("magpierss/rss_fetch.inc");
// rss daten herunterladen und parsen
$data=fetch_rss("http://del.icio.us/rss/blacklord");
$data=$data->items;
// los gehts
foreach($data AS $item)
{
// die daten in verstaendliche variabeln schreiben
$title= addSlashes($item['title']);
$link= $item['link'];
$date= intVal($item['date_timestamp']);
// tags als array speichern
$tags= explode(" ",strToLower($item['dc']['subject']));
$description= NULL;
// wenn eine beschreibung geschreiben worden ist
if(isSet($item['description']))
{
$description=addSlashes($item['description']);
}
// den lang: tag rausfiltern und die richtige sprache in $lang schreiben
$tags_arr=array();
foreach($tags AS $tag)
{
if(preg_match("/^lang:([a-z]{2}$)/",$tag,$result))
{
$lang=$result[1];
}
else
{
$tags_arr[]=$tag;
}
}
// tags wieder zusammensetzten
$tags=implode(" ",$tags_arr);
// ueberpruefen, ob der link schon in der datenbank ist
$res=$db->query("
SELECT
delActive
FROM
".TBL_PREFIX.TBL_DELICIOUS."
WHERE
delDate=".$date." AND
delLink='".$link."'");
// wenn nein: einfuegen. los!
if($db->num_rows($res)==0)
{
$db->query("
INSERT INTO
".TBL_PREFIX.TBL_DELICIOUS."
(
`delTitle`,
`delLink`,
`delDate`,
`delTags`,
`delDescription`,
`delLang`
)
VALUES
(
'".$title."',
'".$link."',
'".$date."',
'".$tags."',
'".$description."',
'".$lang."'
)");
// noch eine kleine ausgabe
echo $title;
space(strLen($title));
echo "[ inserted ]\n";
}
// wenn ja: nur aendern, man weiss ja nie
else
{
if($db->result($res,0,"delActive")==0)
{
$db->query("
UPDATE
".TBL_PREFIX.TBL_DELICIOUS."
SET
`delTitle`='".$title."',
`delLink`='".$link."',
`delDate`='".$date."',
`delTags`='".$tags."',
`delDescription`='".$description."',
`delLang`='".$lang."'
WHERE
delDate=".$date." AND
delLink='".$link."'");
}
}
}
?>
Dieses Script kann, wenn die Zugriffsrechte korrekt gesetzt sind, über die Shell aufgerufen werden.
Verbesserungsvorschläge sind gerne Willkommen






