anar a dada newsfeed! (anglés)
<?
//dada newsfeed: 2003 by eugenio tisselli
//Aquest programa és el sistema de regles que generen a dada newsfeed
//És una col.lecció de funcions i procediments que instrueixen
//a l'ordinador per a realitzar la següent tasca:
//1. Prendre un titular aleatòri d'un servidor de noticies actuals
//2. Prendre una imatge aleatòria d'un banc d'imatges, basada en una
paraula pressa aleatòriament del titular
//3. Combinar aquest dos elements en un "web-collage" i mostrar-los
en una pàgina
//4. Si l'usuari clica l'imatge, un nou titular i la seva respectiva imatge
són desplegats
//5. Si l'usuari clica en el titular, es desplega una imatge nova i el titular
es transforma.
//L'ordinador intenta obtenir un sinònim per a cada una de les paraules
del titular.
//Aquests sinònims es prenen d'un diccionari de sinònims d'internet,
i si no es
//troba es preserva la paraula original.
//A vegades el dada newsfeed tarda massa, o es cansa,...
//quan això succeix, hom no s'ha de preocupar: només s'ha de clicar
el botó
//refrescar del navegador....
//Dada newsfeed no te res a veure amb la rapidesa o eficiència, encara
que a
//vegades ho intenta!
//Al llarg del codi hi ha comentàris, de manera que fins i tot els no-programadors
//poden fer-hi una ullada a què està passant, per veure aquest
codi en acció
//s'ha de clicar en els enllaços titulats: anar
a dada newsfeed!
//escrit en php
//aquest codi és lliure per ésser utilitzat i modificat
//
//getSynonym: aquesta funció reb una paraula com a paràmetre (en
angles)
//i retorna un sinònim provinent del servidor
//thesaurus.reference.com
//si no troba cap sinònim, torna una cadena buida.
//
function getSynonym($word) {
$synonym = "";
$thesaurus="http://thesaurus.reference.com/search?q=$word"; //url del diccionari de sinònims, intenta trobar la paraula "$word"$fd = fopen($thesaurus,"r"); //obrir la pàgina de sinònims
while(!feof($fd)) {$pgdata .= fread($fd, 5000); //llegeix sinònims
$start = strpos($pgdata, "<tr><td align=right valign=top><b>Synonyms:</b> </td><td>");
$end = strpos($pgdata, "<tr><td align=right valign=top><b>Concept:</b> </td>");
$size= $end-$start;$synonym = strip_tags(substr($pgdata, $start, $size)); //obtenir sinònims per a la paraula especificada
$synonym = ereg_replace ("Synonyms:", "", $synonym);$words = explode(",",$synonym); //afegir els sinònims a la llista
if (sizeof($words)>0) {
$synonym = $words[rand(0,sizeof($words)-1)]; //obtenir un element aleatòri de la llista
} else {
$synonym = ""; //no hi ha sinònims, tornar una cadena buida
}
if (strpos($synonym,"Antonyms:") > 0) {$synonym = ""; //a vegades es troba un antònim...
}
}
return $synonym;
}
//
//NumGen: Aquesta funció retorna un número aleatòri
//amb un número de digits específic pel paràmetre "length"
//
function NumGen($length){
for ($i = 1; $i <= $length; $i++) {
if ($i == 1)
$randnum = rand(0, 9);
else
$randnum .= rand(0, 9);
}
return $randnum;
}
//
//Multi_strpos: retorna una llista amb totes les ocurrències
//d'un patró dins d'una cadena de text
//
function Multi_strpos($pattern, $sequence)
{
$n = -1;
while (ereg($pattern, $sequence)) {
$n++;
$fragment = split($pattern, $sequence);
$trimsize = (strlen($fragment[0]))+1; $sequence = "*".substr($sequence, $trimsize);
$position[$n] = (strlen($fragment[0]) + $position[($n-1)]);}
return $position;
}
//
//getImageFromWord: Aquesta funció retorna
//la url d'una imatge, obtinguda gràcies al buscador d'imatges de Google
o Altavista
//
function getImageFromWord($word_image) {
$imageUrl = "";
$source="http://images.google.com/images?q=".$word_image;
$fd = fopen($source,"r"); //obrir el buscador d'imatges de Google
while(!feof($fd)) {
$pgdata .= fread($fd, 5000); //llegir resultat de Google
}
$arr_image = Multi_strpos("\/images\?q\=tbn\:",$pgdata); //agafar les posicions
de les url's de les imatges
$start = $arr_image[rand(0,sizeof($arr_image))]; //obtenir una sola imatge
$end = strpos($pgdata, "&", $start);
$size = $end-$start;
if ($size > 0) {
$imageUrl = "<img src=\"http://images.google.com".urldecode(substr($pgdata,$start,$size)); //extreure l'url de la imatge
//si l'arxiu no és vàlid, obtenir una imatge aleatòria del buscador Altavista$image_info = @getimagesize("http://images.google.com".substr($pgdata,$start,$size));
$x_size=$image_info[0];
$y_size=$image_info[1];
$type=$image_info[2];
if ($x_size <= 0 || $y_size <= 0 || $type == 0) {$imageUrl = "<img src=http://thm-br1r2.search.vip.scd.yahoo.com/image/21".NumGen(7)." height=345 width=345>";
} else {
$img_width = $x_size * 3;
$img_height = $y_size * 3;
$imageUrl .= "\" width=$img_width height=$img_height>";}
}
return $imageUrl;
}
//En aquest instant comença tot:
//si no hi ha un titular actual, trobar-ne un
if (!isset($story)) {
$source = "Top stories"; //categoria de noticies de moreover.com
$urlfeed = "http://p.moreover.com/cgi-local/page?c=".rawurlencode($source)."&o=xml"; //agafar noticies de moverover.com$xml = fopen($urlfeed,"r");
if(!$xml)die("Connect to newssource failed.");
$xmldata = fread($xml ,640000);
eregi("(<article id.*>.*</article>)", $xmldata ,$articlearray); //agafar tots els titulars
$articles = explode("<article", $articlearray[0]); //i posar-los en una llistaereg("<headline_text>(.*)</headline_text>",$articles[rand(1,sizeof($articles))], $headline); //agafar un titular aleatòri
$story = $headline[1];
$story = stripslashes($story); //treure caràcters no desitjats
}
//tenim un titular, ara volem
//obtenir sinònims per a cada paraula
$words = explode(" ",$story); //posar les paraules del titular en un llista
if (isset($repeat)) {
for ($i=0; $i<sizeof($words); $i++) { //repetir aquesta operació per cada paraula
$words[$i] = stripslashes($words[$i]); //treure caràcters desitjats
//la següent instrucció exclou els mots de menys de 3 lletres i
//algunes altres paraules específiques. Això es fa per mantenir una estructura
//bàsica del titular, i no transformar-la massa. Aquestes normes poden ser
//modificades i, fins i tot, introduir-ne de noves. Les paraules excluides són
//arbitràries, senzillament se n'introdueixen de noves de tant en tant.
//Això es podria fer de manera més elegant, utilitzant una llista de "paraules
//excluides", per exemple ...if ((strlen($words[$i]) > 2) && ($words[$i] != "for") && ($words[$i] != "the") && ($words[$i] != "and") && ($words[$i] != "but") && ($words[$i] != "from") && ($words[$i] != "with")) {
$synonym = trim(getSynonym($words[$i])); //si la paraula qualifica, obtenir un sinònim
if ($synonym != "") {$words[$i] = eregi_replace(" ","",$synonym); //treure espais en blanc
}
//si no es troba un sinònim, es conserva la paraula original}
}
}
$story = implode(" ",$words); //al mateix temps, reconstruir el titular
amb totes les paraules
$story = ucfirst(strtolower($story)); //el primer caràcter del titular
és una lletra majúscula
//ara, l'imatge. Agafar una imatge del buscador Google, basada
//en una paraula presa aleatòriament del titular.
//En primer lloc, es pren la paraula eleatòria.
//Per obtenir imatges més interessants, primen les paraules llargues.
//NOTA:LES IMATGES PODEN TENIR CONTINGUT EXPLICIT
$rand_word = "";
$counter = 0;
while ((strlen($rand_word) < 3) && ($counter < 10)) {
$rand_word = $words[rand(0,sizeof($words)-1)];
$counter++;
}
//intentar trobar una imatge relacionada amb la paraula escollida
$image = getImageFromWord($rand_word);
$link = "<a href=\"dadanewsfeed.php?story=".$story."&repeat=1\">";
//segueix codi en html...
?>
<html>
<head>
<title>dadanewsfeed</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
</head>
<body bgcolor="#000000" text="#FFFFFF" link="#FFFFFF"
vlink="#FFFFFF" alink="#FFFFFF">
<div align="center">
<a href=dadanewsfeed.php><? echo $image; ?></a>
<p><font face="Courier New, Courier, mono" size="4"><?
echo $link; echo $story; ?></a></font></p>
</div>
</body>
</html>
<? unset($story); ?>