Mostrando uma agenda do Google Calendar no seu site

Escrito em PHP. Pode ser usado no tema do seu WordPress. Requer CURL. Faz cache do calendário para não ter que baixá-lo sempre que alguém entra no seu site. Desenvolvido para um site que vai sair nos próximos dias. Use, modifique e distribua como quiser. (Não me responsabilizo por qualquer problema. Fiz pra um caso específico. A checagem de erros é meio porca.)

<?php
date_default_timezone_set('America/Sao_Paulo');
$events = Array();
$dom = new DOMDocument();

$file = "cached_calendar.xml";

$last = -1;
if (file_exists($file)) {
    $last = filemtime($file);
}
// Mude 3600 para o tempo (em segundos) que você quiser que o cache expire
if (time() - $last > 3600) {
    $fp = fopen($file, "w+");
    if (!$fp) {
        die();
    }
    // Substitua o e-mail do calendário do Google CodeJam pelo e-mail do seu calendário (público)
    $ch = curl_init("https://www.google.com/calendar/feeds/" .
      "google.com_jqv7qt9iifsaj94cuknckrabd8%40group.calendar.google.com/public/full");
    curl_setopt($ch, CURLOPT_TIMEOUT, 50);
    curl_setopt($ch, CURLOPT_FILE, $fp);
    curl_exec($ch);
    curl_close($ch);
    fclose($fp);
}

$dom->load($file);
$feed = $dom->getElementsByTagName("feed");
$entries = $feed->item(0)->getElementsByTagName("entry");
foreach ($entries as $entry) {
    $children = $entry->getElementsByTagName("*");
    $day = "";
    $start = "";
    $end = "";
    foreach ($children as $child) {
        switch ($child->tagName) {
        case "title":
            $title = $child->nodeValue;
            break;
        case "gd:when":
            if ($child->hasAttribute("startTime")) {
                $st = strtotime($child->getAttribute("startTime"));
                $time_to_sort = $st;
                $day = date_i18n("l, d/M", $st);
                $start = date("H:i", $st);
            }
            if ($child->hasAttribute("endTime")) {
                $et = strtotime($child->getAttribute("endTime"));
                $end = date("H:i", $et);
            }
            break;
        }
    }
    if ($title != "" && $day != "") {
        $events[] = Array(
            "time_to_sort" => $time_to_sort,
            "day" => $day,
            "start" => $start,
            "end" => $end,
            "title" => $title
        );
    }
}
function cmp($a, $b) {
    $a = $a["time_to_sort"];
    $b = $b["time_to_sort"];
    if ($a == $b) {
        return strcmp($a["title"], $b["title"]);
    }
    return ($a < $b) ? -1 : 1;
}
usort($events, "cmp");

$n = count($events);
if ($n > 0) {
    $lastDay = "";
    for ($i = 0; $i < $n; $i++) {
        $day = $events[$i]['day'];
        $title = $events[$i]['title'];
        $start = $events[$i]['start'];
        $end = $events[$i]['end'];
        if ($lastDay != $day) {
            if ($i != 0) {
                echo "</ul>\n\n";
            }
            echo "<h3 class="day"><span>$day</span></h3>\n";
            echo "<ul>\n";
          }
          echo "\t<li>\n";
            if ($start != "") {
                // Você pode modificar aqui para mostrar o horário de término ($end).
                echo "tt<span class="time">{$start}</span>\n";
            }
            echo "\t\t<strong>{$title}</strong>\n";
            echo "\t</li>\n";
          $lastDay = $day;
      }
      echo "</ul>\n";
} else {
    echo "<p>Nenhum evento cadastrado.</p>\n";
}
?>

Estatísticas estranhas

A linha verde é a quantidade de subscribers do feed desse blog, segundo o Feedburner. A linha azul é a quantidade de vezes que um artigo foi lido (ou clicado) por algum desses leitores.

Feed Stats Dashboard

Como vocês podem notar, antes de eu criar este blog o feed estava estabilizado em 100. Logo que eu criei a quantidade de leitores aumentou substancialmente até quase 200. De um dia pro outro, de repente, como se para me confundir criando uma parábola, a quantidade de leitores começou a diminuir muito. Agora chegou em 78 (menos que eu tinha antes de começar a escrever).

Alguém tem algum palpite para o que está havendo?

Feeds RSS para fotologs

Não tenho programado absolutamente nada, a não ser nos trabalhos remunerados. Eu vejo a programação como uma arte… Programar é como compôr uma música, pintar, atuar; é preciso haver inspiração. Eu não ando inspirado para programar, mas nesse caso a necessidade me levou a criação de um script que pode ter utilidade para algum leitor perdido…

No ano passado, eu escrevi um script que gerava feeds RSS para fotologs do fotolog.net. O tempo passou, o meu usuário na UNICAMP foi deletado e nessa semana eu voltei a ter a necessidade de acompanhar um fotolog. Então, resolvi reescrever o script, agora com mais funcionalidades:

  • Compatível com Bloglines
  • Tem como descrição o “título” que o usuário coloca no Fotolog.net.
  • É atualizado sempre que há novos comentários nos últimos 6 posts.
  • Você pode comentar de dentro do seu leitor de feeds (ele copia o formulário de comentário pro feed).
  • Ele faz cache de tudo.

Resolvi presentear todo mundo usando o presente que a Dreamhost me deu no mês passado: 200gb de espaço e 2tb de banda tinham que servir pra alguma coisa no meu servidor. Então, ao invés de disponibilizar o código, eu criei uma página PHP que gera o feed que você quiser para você:

http://fotolog.tiagomadeira.net/USUARIO

Para ver um feed em ação no Bloglines, entre no meu diretório de feeds e procure um feed com prefixo “fotolog.com/”.

Depois de acabar de criar o script, ainda lembrei que o IE7 foi lançado nessa semana com suporte a feeds! Então, esse negócio pode ser útil pra bastante gente.

Acompanhe os fotologs dos seus amigos no Bloglines, divulgue aos seus amigos, comente sugerindo melhorias; aproveite enquanto eu ainda estou inspirado pra corrigir os defeitos! =)

Bill Gates é o nosso herói!

É engraçado a imagem do Bill Gates que a mídia tem feito com algumas notícias… Não sei se é ele que realmente está se tornando um ser humano ou ele está sendo pressionado assim e está tendo que se fazer pra brigar com o Google e o Yahoo (claro que esse segundo motivo é bem mais provável e, quem conhece o Bill Gates, sabe muito bem disso). Dessa vez eu li no meu feed de tecnologia do Terra uma notícia de um menino de 10 anos que presidiu a Microsoft por um dia.

Mas o pior mesmo foi aquela outra dos caras da Microsoft quererem padronizar o símbolo do RSS. Pô… Quando é que a Microsoft tentou padronizar alguma coisa na história? :D Eles estão realmente mudando. E acho que isso não é muito legal, porque eles parecem estar fazendo isso por interesse. Vejo um Google cada vez mais capitalista e, mesmo com propostas legais de software livre e talz, tá se unindo com a Microsoft em várias coisas. Não era esse o final que eu esperava para essa história.

De qualquer maneira, o bom é que a Microsoft está começando a desenvolver coisas livres também e parece que vamos ter uma mudança bem grande aí na internet nos próximos 10 anos por causa de todos esses acontecimentos, da Web 2.0 e dessas parcerias.

Fotolog.net Feed

[update] O script foi reescrito aqui e está muito mais interessante agora! :-) [/update]

Não sei se isso já não existe; Não sei se ninguém nunca sentiu falta. Afim de valorizar feeds RSS e acompanhar fotos de amigos, resolvi criar um feed para fotologs do Fotolog.net.

Eu disponibilizei o código aqui: ff.phps (infelizmente esse código foi perdido com o tempo) mas o script para uso coloquei no “meu servidor super-poderoso” na UNICAMP: ff.php (infelizmente esse arquivo foi perdido com o tempo), por um motivo óbvio: economia de banda. Só que os caras da UNICAMP devem excluir o meu usuário algum dia, por isso sugiro que você pegue o código e coloque no seu servidor. Só precisa ter fopen_wrappers (quem que já programou em PHP e nunca viu aquela mensagem no manual: Tip: You can use a URL as a filename with this function if the fopen wrappers have been enabled? :D )

Hmmm… Talvez esse código tenha algum bug. Não sei o porquê de nenhum dos meus feeds funcionarem no Google Reader. Quem tiver afim de corrigir, me manda o novo arquivo que arrumarei com enorme satisfação (e aproveita pra me ensinar onde foi que eu errei!). Além disso, tenho dúvidas sobre se a foto pode ser aberta de fora do Fotolog.net. No Bloglines, só consegui visualizar as fotos que eu já tinha no cache do navegador. Pra mim isso não faz muita diferença, já que eu gosto de feeds na barra de favoritos do Firefox.

Coisas legais que vi hoje

© 2005–2020 Tiago Madeira