Samstag, 19. Dezember 2009

reCAPTCHA

Toller Vortrag zu reCAPTCHA vom CAPTCHA Erfinder Luis von Ahn

Spellchecker für Online Applications

Es gab einen coolen Service von Google um Formulareingaben zu überprüfen und aus Eingaben wie "Belrin" "Berlin" zu erkennen. Im Rahmen der Soap Search API gab es Vorschläge zu anderen Schreibweisen. Leider hat man den diesen Service aufgegeben, und seit Mitte 2009 funktioniert es nicht mehr. Der Nachfolger, die Ajax Search Api, hat dieses Feature leider nicht.
Auf der Suche habe ich diesen Blog-Artikel gefunden, in dem jemand die Google Toolbar Api verwendet um zum Ziel zu kommen. So ganz offiziell war das aber wohl nicht, eher ein "Hack", funktioniert aber gut!

Allerdings hab ich weitergesucht und was offizielles gesucht. Und bin dabei auf Bing gestossen. Der Microsoft-Service ging bisher ein bisschen an mir vorbei, obwohl die Karten bspw. gar nicht schlecht sind. Politically correct kann man heute aber wohl auch wieder zu MS stehen, Google hat ja so eine Marktmacht, da sollte man sich über jeden Konkurrenten freuen!

Und irgendwie gibt es ziemlich versteckt auch eine Bing Api. Superschlecht dokumentiert, verwirrend verlinkt und überhaupt, da gibt es noch so einiges von Google abzukucken!

Also, man muss sich auch hier einen Api Key generieren. IMO muss man sich vorher dafür registrieren.

So in etwa sieht meine funktion aus.
function DoSpellCheck ($suchbegriff)
{
$request = "http://api.bing.net/json.aspx?Appid=".BINGKEY."&sources=spell&query=" . urlencode($suchbegriff);
$jsonobj = json_decode(file_get_contents($request));
if ($jsonobj && $jsonobj->SearchResponse->Spell->Total)
{
if ($jsonobj->SearchResponse->Spell->Total>1)
return $jsonobj->SearchResponse->Spell->Results;
elseif ($jsonobj->SearchResponse->Spell->Total==1)
return ($jsonobj->SearchResponse->Spell->Results[0]->Value);
}
}

Dienstag, 12. Mai 2009

Freitag, 24. April 2009

Pear XML_RSS

Pear XML_RSS ist zwar noch nicht so richtig alpha, aber was ist das bei Pear schon?

Sehr einfach, sehr effektiv. Installation
pear install XML_RSS

dann erscheint wahrscheinlich ein Hinweis, das das ganze noch nicht stable ist und man das alpha-Paket benutzen soll. Also einfach das angegebene Paket installieren.

Dann kanns losgehen.

require_once "XML/RSS.php";
$rss =& new XML_RSS("http://www.auswaertiges-amt.de/diplo/de/Infoservice/RSS/Reisehinweise.xml");
$rss->parse();
$rssfeed = "<ul>";
foreach ($rss->getItems() as $lfd_nr => $rsseintrag)
$rssfeed .= "<li>". $rsseintrag["title"] ."</li>";
$rssfeed .= "</ul>";
echo $rssfeed;

Super. Angenommen man will nicht ständig den Feed aufrufen, weil der vielleicht langsam ist... kann man auch noch lustig mit PEAR::Cache_Lite arbeiten:


require_once 'Cache/Lite.php';
$cacheopt=array('cacheDir'=>'/tmp','lifeTime'=>(60*60),'pearErrorMode'=>CACHE_LITE_ERROR_DIE,'caching'=>true);
$cache=&new Cache_Lite($cacheopt);

if($rssobj = $cache->get('RSSAUSWAERTIGESAMT'))
$rss = unserialize($rssobj);
else
{
$rss =& new XML_RSS("http://www.auswaertiges-amt.de/diplo/de/Infoservice/RSS/Reisehinweise.xml");
$rss->parse();
$cache->save(serialize($rss),"RSSAUSWAERTIGESAMT");
}


und dann kanns weitergehen wie oben:
$rssfeed = "<ul>";
foreach ($rss->getItems() as $lfd_nr => $rsseintrag)
$rssfeed .= "<li>". $rsseintrag["title"] ."</li>";
$rssfeed .= "</ul>";
echo $rssfeed;

Dienstag, 24. Februar 2009

Donnerstag, 8. Januar 2009

PHP: Alter berechnen

Jede Menge Scripte berechnen das Alter. Na, eigentlich eines, das immer wieder zitiert wird, und falsch ist, es rechnet nämlich in Tagen und vergisst dabei die Schaltjahre. Naja, nicht so dramatisch wenn hier Kindergeburtstage ausgegeben werden, aber bei allen Älteren schon problematisch...
$age = intval(($jetzt - $geburt) / (3600 * 24 * 365));

Es gibt auch welche (eines z.B. hier), wo es funktioniert, das finde ich aber recht kompliziert und vor allem lang.


function getAlter($geburtsdatum, $vondate=0)
{
if(empty($vondate))$vondate=time();
$geburt = strtotime($geburtsdatum);
$jahre = date("Y", $vondate)-date("Y", $geburt);
if (date("m", $vondate) < date("m", $geburt) ||
(date("m", $vondate) == date("m", $geburt) &&
date("d", $vondate) < date("d", $geburt)))
$jahre--;
return $jahre;
}