Mesclagem de vários feeds de calendário do Google para exibição na minha área de trabalho

StackOverflow https://stackoverflow.com/questions/335648

  •  22-07-2019
  •  | 
  •  

Pergunta

Eu tenho vários calendários do Google que gostaria de mesclar e colocar na minha área de trabalho do Windows usando Samurize. Eu tentei usar o plug -in de raspador de página do Samurize, mas ele não parece estar à altura da tarefa.

Eu posso fazer o Samurize para executar um script e colocar sua saída na área de trabalho, mas não tenho certeza de quais são as melhores ferramentas para fazer isso.

Todos os URLs que tenho são da forma:

http://www.google.com/calendar/feeds/example%40gmail.com/private-REMOVED/basic?futureevents=true&orderby=starttime&sortorder=ascending&singleevents=true

Para que eu pudesse buscá -los usando o CRO, mas então preciso filtrá -los.

Eu quero algo que se parece:

2009 12 02  Event from calendar 1's description 
2009 12 03  Event from calendar 2's description 
2009 12 04  Event from calendar 1's description 
2009 12 05  Event from calendar 3's description 
2009 12 06  Event from calendar 1's description 

No entanto, as datas no calendário são formatadas assim:

<title type='html'>Event from calendar 1's description</title><summary type='html'>When: Fri 5 Dec 2008&lt;br&gt;

Então, como faço para filtrar as datas e descrições e converter as datas?

(Eu tenho o Cygwin instalado para que algo usando Perl ou Sed/Awk seja perfeito, pois estou familiarizado o suficiente com eles para que eu esteja confiante em alterá -los no futuro, mas estou aberto a sugestões.)

Foi útil?

Solução 3

Construindo no script de John W, isso é o que estou usando

#!c:\cygwin\bin\perl.exe -w
use strict;
use LWP::Simple qw(get);

my %calendars = ( "Sam Hasler", "http://www.google.com/calendar/feeds/blah/blah/basic"
                , "Family    ", "http://www.google.com/calendar/feeds/blah/blah/basic"
                , "Work      ", "http://www.google.com/calendar/feeds/blah/blah/basic"
                );

my $params = "?futureevents=true&orderby=starttime&sortorder=ascending&singleevents=true";

my %months = ( "Jan", "01", "Feb", "02", "Mar", "03", "Apr", "04"
             , "May", "05", "Jun", "06", "Jul", "07", "Aug", "08"
             , "Sep", "09", "Oct", "10", "Nov", "11", "Dec", "12");

my $calendar_name;
my $calendar_url;
my @lines;

while (($calendar_name, $calendar_url) = each(%calendars)){
    my $calendar_data = get "$calendar_url$params";
    @lines = split(/\n/, $calendar_data);

    foreach (@lines) {
        if (/<title type='html'>([\d\D]*)<\/title><summary type='html'>When: (\S+) (\S+) (\S+) (\S+)&lt;br&gt;/)
        {
            my $day = "$3";
            if ($3 < 10 ) {
                $day = "0$3";
            }

            print "$5 $months{$4} $day\t$calendar_name\t$1\n";
        }
    }

}

Acabei de pintar a saída através sort Para obtê -lo em ordem de data.

Atualizar: Convertei meu script em um plug -in e o enviei para o site Samurize: Mesclar feeds do calendário do Google.

Outras dicas

Estou aprendendo Perl, então, por favor, não ria muito, mas aqui está algo que pode levar você a maior parte do caminho para analisar:

#!C:\Perl\bin -w
use strict;

my %months = ("Jan", "01", "Feb", "02", "Mar", "03", ... etc. etc. ... "Dec", "12");

$_ = "<title type='html'>Event from calendar 1's description</title><summary type='html'>When: Fri 5 Dec 2008<br>";

if (/<title type='html'>([\d\D]*)<\/title><summary type='html'>When: (\S+) (\S+) (\S+) (\S+)<br>/)
{
    print "$5 $months{$4} $3 $1\n";
}

Duas idéias.

Você poderia usar o Yahoo Pipes (veja Este artigo.)

Ou, se você não quiser esperar o Yahoo para atualizar seus dados, aqui é um script python em desenvolvimento para mesclar arquivos iical.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top