W przykładzie poniżej Perl pobiera dane z arkusza
Google Docs,
i zapisuje je do pliku tymczasowego. Następnie TeX -- uruchomiony
,,z wnętrza'' skryptu -- formatuje ww. dane
(układ graficzny jest zdefiniowany w stylach
(por. \input brasskoncert.sty
):
use Net::Google::Spreadsheets; use Getopt::Long; use Encode qw(encode); my $STitle = 'Konkurs_Brass'; # nazwa arkusza do pobrania my $pdftexprogname = 'pdfmex'; # nazwa programu uruchamiającego TeXa my $outputname = "tmp__.tex"; # nazwa pliku tmp my $pdfintermode = "-interaction=nonstopmode"; # lepsze niż "-interaction=batchmode"; GetOptions( 't=s' => \$title,); ## nazwy kolumn w arkuszu: my @Cols = ('nazwisko', 'kraj', 'instrument', 'srednia'); my $service = Net::Google::Spreadsheets->new( username => '???', password => '???' ); my @spreadsheets = $service->spreadsheets(); my $spr_title = $service->spreadsheet( { title => "$STitle" }); my $worksheet = $spr_title->worksheet( { title => 'sheet1' }); my @rows = $worksheet->rows; open (OUT, ">$outputname") || die "Nie mogę otworzyć $outputname.tex!\n\n"; print OUT "\\input brasskoncert.sty\n\\HEAD{$title}\n"; for $r (@rows ) { $rc = $r->content; print OUT "\\Row"; for $t (@Cols ) { print OUT "{", encode("iso-8859-2", ${$rc}{$t}), "}"; } print OUT "\n"; } print OUT "\\TAIL \\bye\n"; close (OUT); my @run_pdftex = ($pdftexprogname, $pdfintermode, $outputname); system ( @run_pdftex ) == 0 || die "Cuś nie tak\n" ; ##
Być może da się prościej, bez Net::Google::Spreadsheets
a poprzez LWP...
Skrypt Erika Möllera , którego używałem do ładowania zdjęć na WikiCommons przestał działać. Konsultacja na stronie wykazała, że jest outdated and should be considered deprecated and useless. Program proponowany w zamian nie podoba mi się. Może i jest dobry, ale zbytnio się różni od poprzedniego a ja nie mam czasu go rozgryzać. Znalazłem za to poprawioną wersję skryptu Möllera, która działa, tutaj (lub tutaj).
Jest ciągle problem z kodowaniem (używam domyślnie ISO-8859-2), bo po przesłaniu na WC tekst jest niepoprawnie zakodowany. Metodą prób i błędów ustaliłem, że działa dopisanie na początku skryptu czegoś takiego:
binmode( STDOUT, ':utf8' ); use open IN => ':encoding(iso-8859-2)'; ## I am using legacy encoding, ha! use open OUT => ':utf8'; ## write utf8
Opis zdjęcia w pliku tekstowym jest w ISO, po przesłaniu na WC kodowanie jest OK. Próbowałem wysyłać pliki kodowane jako UTF-8, ale to też nie działało (mój perl jest w wersji v5.8.8).
Rysunek obok znalazłem przypadkiem. Ktoś skopiował moje zdjęcie z flickr.com na WC dodając zabawny opis...
Przy okazji ustaliłem jak przejść do ,,trybu UTF'' otwierając nowy plik w Emacs:
C-x C-m f utf-8