it* cnn lite on gopher Err codevoid.de 70 i Err codevoid.de 70 hgit clone git://git.codevoid.de/cnn-gopher.git URL:git://git.codevoid.de/cnn-gopher.git codevoid.de 70 1Log /git/cnn-gopher/log.gph codevoid.de 70 1Files /git/cnn-gopher/files.gph codevoid.de 70 1Refs /git/cnn-gopher/refs.gph codevoid.de 70 i--- Err codevoid.de 70 1commit 2848ee81758bacaede370cd7c9045a1edbd859b5 /git/cnn-gopher/commit/2848ee81758bacaede370cd7c9045a1edbd859b5.gph codevoid.de 70 hAuthor: Stefan Hagen URL:mailto:sh+git[at]codevoid[dot]de codevoid.de 70 iDate: Tue, 21 Aug 2018 23:20:54 +0200 Err codevoid.de 70 i Err codevoid.de 70 iInitial Commit Err codevoid.de 70 i Err codevoid.de 70 iDiffstat: Err codevoid.de 70 i A cnn-gopher.dcgi | 124 +++++++++++++++++++++++++++++++ Err codevoid.de 70 i Err codevoid.de 70 i1 file changed, 124 insertions(+), 0 deletions(-) Err codevoid.de 70 i--- Err codevoid.de 70 1diff --git a/cnn-gopher.dcgi b/cnn-gopher.dcgi /git/cnn-gopher/file/cnn-gopher.dcgi.gph codevoid.de 70 it@@ -0,0 +1,124 @@ Err codevoid.de 70 i+#!/usr/local/bin/perl Err codevoid.de 70 i+ Err codevoid.de 70 i+# Author: Stefan Hagen Err codevoid.de 70 i+# Web: http://codevoid.de Err codevoid.de 70 i+# Document License: ISC (see LICENSE file) Err codevoid.de 70 i+ Err codevoid.de 70 i+use strict; Err codevoid.de 70 i+use warnings; Err codevoid.de 70 i+ Err codevoid.de 70 i+use XML::LibXML qw( ); Err codevoid.de 70 i+use LWP::UserAgent; Err codevoid.de 70 i+use HTML::LinkExtractor; Err codevoid.de 70 i+use HTML::Restrict; Err codevoid.de 70 i+use HTML::Entities; Err codevoid.de 70 i+use Text::Wrap; Err codevoid.de 70 i+$Text::Wrap::columns=72; Err codevoid.de 70 i+use Encode; Err codevoid.de 70 i+ Err codevoid.de 70 i+print ' Err codevoid.de 70 i+ .-\') _ .-\') _ Err codevoid.de 70 i+ ( OO ) ) ( OO ) ) Err codevoid.de 70 i+ .-----. ,--./ ,--,\' ,--./ ,--,\' Err codevoid.de 70 i+ \' .--./ | \\ | |\\ | \\ | |\\ Err codevoid.de 70 i+ | |(\'-. | \\| | )| \\| | ) Err codevoid.de 70 i+ /_) |OO )| . |/ | . |/ Err codevoid.de 70 i+ || |`-\'| | |\\ | | |\\ | Err codevoid.de 70 i+(_\' \'--\'\\ | | \\ | | | \\ | Err codevoid.de 70 i+ `-----\' `--\' `--\' `--\' `--\' Err codevoid.de 70 i+lite.cnn.io - on gopher - inofficial Err codevoid.de 70 i+ Err codevoid.de 70 i+'; Err codevoid.de 70 i+ Err codevoid.de 70 i+my $protocol = "http"; Err codevoid.de 70 i+my $server = "lite.cnn.io"; Err codevoid.de 70 i+ Err codevoid.de 70 i+ Err codevoid.de 70 i+my $uri = "/en"; Err codevoid.de 70 i+ Err codevoid.de 70 i+if($ARGV[1]) { Err codevoid.de 70 i+ $uri = "/en/article/$ARGV[1]"; Err codevoid.de 70 i+} Err codevoid.de 70 i+ Err codevoid.de 70 i+# fetch data Err codevoid.de 70 i+my $REST= ({HOST => "$server", Err codevoid.de 70 i+ URL => "$protocol://$server$uri" }); Err codevoid.de 70 i+$REST->{UA} = LWP::UserAgent->new(keep_alive => 0, timeout => 5); Err codevoid.de 70 i+$REST->{UA}->agent("codevoid-cnn-lite-gopherproxy/0.1"); Err codevoid.de 70 i+$REST->{resource} = $REST->{URL}; Err codevoid.de 70 i+$REST->{request} = HTTP::Request->new( GET => $REST->{resource} ); Err codevoid.de 70 i+$REST->{response} = $REST->{UA}->request( $REST->{request} ); Err codevoid.de 70 i+ Err codevoid.de 70 i+my $document = $REST->{response}->content; Err codevoid.de 70 i+ Err codevoid.de 70 i+if($ARGV[1]) { Err codevoid.de 70 i+ # Replace some HTML elements Err codevoid.de 70 i+ my $HR = HTML::Restrict->new(); Err codevoid.de 70 i+ Err codevoid.de 70 i+ $document =~ s/.*(

.*)/$1/g; Err codevoid.de 70 i+ $document =~ s/Go to the full CNN experience//g; Err codevoid.de 70 i+ Err codevoid.de 70 i+ $document =~ s/

/\n# /g; Err codevoid.de 70 i+ $document =~ s/<\/h1>/\n/g; Err codevoid.de 70 i+ $document =~ s/
/\n/g; Err codevoid.de 70 i+ $document =~ s/<\/div>/\n/g; Err codevoid.de 70 i+ $document =~ s/

/\n\n/g; Err codevoid.de 70 i+ $document =~ s/

  • /\n\n\* /g; Err codevoid.de 70 i+ $document =~ s/
    /\n\n--- QUOTE ---\n/g; Err codevoid.de 70 i+ $document =~ s/<\/blockquote>/\n---- END ----\n\n/g; Err codevoid.de 70 i+ Err codevoid.de 70 i+ # Strip remaining html Err codevoid.de 70 i+ my $document = $HR->process($document); Err codevoid.de 70 i+ Err codevoid.de 70 i+ # htmldecode (quick fix - could be done properly) Err codevoid.de 70 i+ $document =~ s/&/\&/gi; Err codevoid.de 70 i+ $document =~ s/%/%%/gi; Err codevoid.de 70 i+ Err codevoid.de 70 i+ $document = wrap("","",$document)."\n"; Err codevoid.de 70 i+ # fix geomyidae ^t design Err codevoid.de 70 i+ $document =~ s/\t/ /g; Err codevoid.de 70 i+ $document =~ s/\nt/\ntt/g; Err codevoid.de 70 i+ printf "\nARTICLE VIEW: \n\n"; Err codevoid.de 70 i+ Err codevoid.de 70 i+ printf decode_entities($document); Err codevoid.de 70 i+ Err codevoid.de 70 i+ printf "\n[1| <- back to index|/cnn|server|port]"; Err codevoid.de 70 i+ exit 0; Err codevoid.de 70 i+} Err codevoid.de 70 i+ Err codevoid.de 70 i+# Search for links Err codevoid.de 70 i+my $LX = new HTML::LinkExtractor(); Err codevoid.de 70 i+$LX->strip(1); Err codevoid.de 70 i+$LX->parse(\$document); Err codevoid.de 70 i+ Err codevoid.de 70 i+# Loop at links, match text, add [counter] and generate output. Err codevoid.de 70 i+my $links = ""; Err codevoid.de 70 i+foreach my $link ($LX->links) { Err codevoid.de 70 i+ foreach my $linkitem (@$link) { Err codevoid.de 70 i+ Err codevoid.de 70 i+ # skip empty links (image links for example) Err codevoid.de 70 i+ if(!$linkitem->{_TEXT}) { next; } Err codevoid.de 70 i+ if($linkitem->{_TEXT} eq "CNN") { next; } Err codevoid.de 70 i+ if($linkitem->{_TEXT} eq "EspaƱol") { next; } Err codevoid.de 70 i+ if($linkitem->{_TEXT} eq "Go to the full CNN experience") { next; } Err codevoid.de 70 i+ Err codevoid.de 70 i+ # extract link ID Err codevoid.de 70 i+ my $shortID = $linkitem->{href}; Err codevoid.de 70 i+ $shortID =~ s|/en/article/||g; Err codevoid.de 70 i+ Err codevoid.de 70 i+ # add link to output scalar Err codevoid.de 70 i+ $links .= sprintf("[1| * %s|/cnn?%s|codevoid.de|70]\n", $linkitem->{_TEXT}, $shortID ); Err codevoid.de 70 i+ } Err codevoid.de 70 i+} Err codevoid.de 70 i+ Err codevoid.de 70 i+# nobody needs more that one newline. Err codevoid.de 70 i+$links =~ s/\n\n(\n)*/\n\n/g; Err codevoid.de 70 i+ Err codevoid.de 70 i+# fix geomyidae ^t design Err codevoid.de 70 i+$links =~ s/&/\&/gi; Err codevoid.de 70 i+$links =~ s/%/%%/gi; Err codevoid.de 70 i+$links =~ s/\t/ /g; Err codevoid.de 70 i+$links =~ s/\nt/\ntt/g; Err codevoid.de 70 i+ Err codevoid.de 70 i+printf "\nINDEX VIEW: \n\n"; Err codevoid.de 70 i+print $links; Err codevoid.de 70 .