notifikace nových gmailů přes rss kanál
drsného gmail2rss
gmail spustil novou službu - upozornění na nové maily pomocí rss kanálu. kluci na konfeře psali o tom, že v news pluginu programu handyday2005 tento kanál nechodí, protože tento plugin nepodporuje ssl a ani autentizaci.
napsal jsem tedy script, který funguje podobně, ale nepotřebuje ony dvě věci, které právě news plugin neumí. pro pristup ke gmailu jsem použil knihovnu libgmailer for php a inspirovat jsem se taky nechal projektem gmail rss feed by thimal.
adresa mého gmail2rss scriptu je http://info.drsny.net/rss_gmail.php. pro jeho správnou funkci je nutné jako parametry zadat uživatelské jméno a heslo. parametry se zadávají v adrese. pokud bych tedy měl na gmailu účet drsny (což nemám) a heslo dummypassword, musel bych zadat adresu takto: http://info.drsny.net/rss_gmail.php?u=drsny&p=dummypassword
protože jsem u mého rss kanálu nadefinoval i styly, zobrazí se tento nejen v rss čtečce, ale i v normálním webovém prohlížeči. ve firefoxu vypadá výtup kanálu takhle:
na následujícíh obrázcích je můj gmail2rss kanál v programu handyday na mém telefonu. první obrázek je přehled konverzací a na druhém obrázku je výpis jedné konverzace.
následující obrázky ukazují možné chybové hlášky. první je při nevyplnění uživatelského jména a hesla, druhá se zobrazí pokud se nepodaří připojit ke gmailu. to nastává hlavně tehdy, když se zadá špatně uživatelské jméno a heslo.
pokud chceš testnout tento script na svých stránkách, čímž můžeš zamezit posílání svého loginu a hesla ke gmailu nešifrovaně přes internet, knihovnu libgmailer si stáhni od výrobce a tady je můj script...
<?
// natazeni knihovny
require("class.gmailer.php");
// nacteni promennych z url
$username = $_GET[u];
$pwd = $_GET[p];
/* pokud chces udelat script tak, aby fungoval jen pro jednoho uzivatele
gmailu a nemusels tudiz posilat login a heslo otevrene po netu, nastav ho
primo ve scriptu. je nutne ale myslet na to, ze pokud se ke scriptu dostane
nekdo jiny, precte si tve uzivatelske jmeno a heslo. no a kdyz ho nacte pres
web, uvidi tve neprectene maily */
// $username = "tvuj_login";
// $pwd = "tvoje_heslo";
// nastaveni ofsetu proti gmt
$tz=Date("O")/100;
$stats = array();
$conversation_store = array();
// nacteni inboxu
$gm = new GMailer();
$gm->setLoginInfo($username, $pwd, $tz);
if ($gm->connect()) {
$gm->fetchBox(GM_STANDARD, "inbox", 0);
$snapshot = $gm->getSnapshot(GM_STANDARD);
if ($snapshot) {
$box = $snapshot->box;
$stats[unread] = 0;
$stats[use_percent] = $snapshot->quota_per;
$stats[inbox_count] = $snapshot->box_total;
match_messages($box);
}
}else{
$error=true;
}
// naplneni pole zpravami
function match_messages($inbox) {
global $conversation_store, $stats;
while (list($index, $conversation_arr) = each($inbox)) {
$unread_conversation = array();
if ($conversation_arr[is_read] == 1) {
$unread_conversation[sender] = $conversation_arr[sender];
$unread_conversation[date] = $conversation_arr[date];
$unread_conversation[title] = $conversation_arr[subj];
$unread_conversation[msgid] = $conversation_arr[msgid];
$unread_conversation[body] = $conversation_arr[snippet];
array_push($conversation_store, $unread_conversation);
$stats[unread]++;
}
}
}
function gmail_rss() {
global $stats, $conversation_store;
if($stats[unread] != 0) {
foreach ($conversation_store as $cv) {
$tmp.=Item($cv[title]." from ".$cv[sender], "", $cv[body], $cv[date]);
}
}
return $tmp;
}
// vygenerovani hlavicky rss dokumentu
function Hlavicka($cat_name){
global $generated;
$generated.="<?xml version=\"1.0\" encoding=\"UTF-8\"?".">
<?xml-stylesheet type=\"text/css\" href=\"http://info.drsny.net/rss.css\"?".">
<rss version=\"2.0\"><channel>
<language>cs</language>
<title>drsného gmail2rss";
if($cat_name){
$generated.=" - $cat_name";
}
$generated.="</title>
<link>http://info.drsny.net/rss_gmail.php</link>
<description>gmail to rss convertor</description>
<copyright>http://drsny.net/</copyright>
<category>Internet Service News</category>
<docs>http://backend.userland.com/rss</docs>
<image>
<url>http://info.drsny.net/images/drsny.net.png</url>
<title>drsného infos</title>
<link>http://drsny.net/</link>
<width>64</width>
<height>64</height>
<description>stránky milana hrubého</description>
</image>
";
}
// vyagenerovani polozky rss dokumentu
function Item($title, $link, $description, $pubdate)
{
$temp.= "<item>\n<title>".$title."</title>\n";
if($link){
$temp.="<link>".$link."</link>\n";
}
if($description){
$temp.="<description>".$description."</description>\n";
}
if($pubdate){
$temp.= "<pubDate>".$pubdate."</pubDate>\n";
}
$temp.= "</item>\n";
return $temp;
}
Hlavicka($username);
// nebylo zadano uzivatelske jmeno a heslo
if($username == "" OR $pwd ==""){
$generated.=Item("nebylo zadáno uživatelské jméno a heslo",
"",
"uživatelské jméno a heslo se zadává prostøednictvím url. \n".
"za adresu\nhttp://info.drsny.net/rss_gmail.php\nje nutno dopsat toto:\n".
"?u=uzivatelske_jmeno&p=heslo\nkde uzivatelske_jmeno je tvoje prihlasovaci jmeno na gmail a heslo je tvoje heslo na gmail.",
"");
// nepodarilo se pripojit
}elseif($error){
$generated.=Item("pøipojení se nezdaøilo",
"",
"byla zadána správná kombinace uživatelské jméno a heslo?",
"");
// pripojeni ok
}else{
$generated.=gmail_rss();
$generated=Str_Replace("…","...",$generated);
$generated=Str_Replace("<b>","",$generated);
$generated=Str_Replace("</b>","",$generated);
$generated=Str_Replace(" "," ",$generated);
$generated=Str_Replace("&","&",$generated);
$gm->disconnect();
}
// odeslani vystupu
$generated.="\n</channel></rss>";
header("Content-Type: text/xml; charset=\"UTF-8\"");
header("Content-Length: ".strval(strlen($generated)));
echo $generated;
?>