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";
}
?>

Feed RSS, Google e OBM

Finalmente implementei o feed RSS que estava faltando na minha página… O Gustavo Custódio, do Colégio, me lembrou de criá-lo e fiz isso agora a noite mesmo…

Segui o padrão do Bruno Torres, porque não tenho muita experiência com feeds XML/RSS e criei até um XSL para não ficar só o feed mesmo, mas ter um “estilo associado a ele”, como diz o Mozilla.

Hmmm… Então agora vocês já podem ver o conteúdo do site via os feeds (o que facilita bastante)… E aproveitem para se encontrarem algum erro (eu fiz na pressa) me avisarem. :)

Hoje coloquei também em minha página o programa Google Adsense. Coloquei um pequeno banner (de 468×60) localizado embaixo do primeiro post da página e outro no rodapé da página e acho que não poluiu e aliás, as cores ficaram discretas e bonitas. :D (hehehe, sou o primeiro cara que diz que gosta de ads no mundo!).

E por falar em Google, nessa semana testei vários serviços deles. Começou com o GoogleTalk e depois que meu irmão colocou rótulo pra “todos” os lugares do mundo no GoogleEarth acabamos realmente nos viciando em Google. Mas os serviços deles são ótimos!

Boatos dizem que o Google vai dominar o mundo e o Pink e o Cérebro trabalham lá. Não sei se é verdade, mas cada vez mais acho que isso realmente faria sentido! Hehehe…

Sábado é a segunda fase da OBM (Olimpíada Brasileira de Matemática) e também começa o Festival de Música de Itajaí. Na Olimpíada, acho que não tenho muita chance e, aliás, nessa semana também andei estudando um pouco (com o César Kawakami inclusive, que me passou umas coisas bem legais sobre Teoria dos Números). No festival, me inscrevi para fazer piano mesmo com o Michel Friedenson.

Depois da semana do festival de música, quero voltar a programar logicamente. Essa semana só tentei fazer coisas em GTK, mas sem muito sucesso (aprendi um pouco de C/GTK, mas depois resolvi PHP/GTK porque PHP é uma linguagem mais completa, mas ainda não decidi nada)…

XUL é legal!

Por influência da Semana Azul, acabei pesquisando e procurando aprender algo sobre XUL. Achei o máximo! Nas palestras, sinceramente, não consegui retirar muita informação útil, mesmo achando que os caras que deram as palestras eram muito bons. Foi mais uma explicação básica sobre conceitos não tão relacionados ao XUL. Na de quarta-feira, sobre Tableless, por exemplo, o Diego só passou o conceito. Bom… Penso que deve ser difícil fazer um evento desses dar certo, mas achei muito legal a idéia e a iniciativa. Acho que as próximas “Semanas azuis” serão cada vez melhores.

Mas o importante disso tudo é que eu acabei conhecendo o XUL olhando o site da Semana Azul, do XUL:Brasil, entre outros links deles. E achei essa linguagem muito massa! É realmente uma forma bem legal de trabalhar com interfaces gráficas multi-plataforma e é uma linguagem bem simples (parece um XHTML).

O problema é que só o Mozilla roda XUL… Então é difícil fazer programas como sites em XUL porque visitantes de todas as maneiras vão acessar e não vão conseguir (na verdade, os navegadores delas é que não vão conseguir) interpretar o XUL.

Mas mesmo assim, principalmente pra sistemas internos ou áreas de administração de sites (onde todos os admins usam Mozilla), acho bem legal começar a utilizar o XUL. Fiz algumas aplicações básicas e depois começarei a trabalhar mais com JavaScript e também PHP pra ver o que sai… :)

Observação: É, esse post “inútil” é só pra sugerir que vocês aprendam XUL mesmo! E vale a pena!

Seletiva IOI

O resultado “final” da seletiva pra Olimpíada Internacional de Informática na Polônia ainda não saiu, mas parou de mudar. Estou em sexto (o sr. Helder Suzuki passou pra quinto e, aliás, lamento ele não ter ido ainda mais pra cima – ele deve estar bem mais desapontado com o resultado do que eu), com 240 pontos. Cada coisa de besteira que eu errei…! Mas tudo bem, ainda tenho mais três anos. :D

Internet Explorer 7

O Internet Explorer 7 Beta 1 saiu! Mas eu não tô conseguindo baixar… Quem quiser saber mais a respeito leia BrunoTorres.net e Tableless.com.br, além do IEBlog (oficial da Microsoft). Enjoy!

[update] Baixei e achei uma porcaria! Mas pelo menos dá pra navegar com abas, embora o recurso seja meio lagger (não é instantâneo como no Mozilla)… Não vou falar muito porque já falaram muita coisa sobre isso na internet! [/update]

© 2005–2020 Tiago Madeira