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:

klikni pro detail...

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.

obrázek 299 obrázek 301

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.

obrázek 302 obrázek 303

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&#248;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&#248;ipojení se nezda&#248;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;
?>

komentáře

25.08.2005 12:57:12
jelikož se ke mě nedostala žádná informace o tom, že by to někdo používal a také gmail dost často upgraduje své stránky a bylo nutné téměř při každé změně měnit i mou gmail2rss stránku, rozhodl jsem se ji zrušit.
celkem komentářů: 1