Accelerated Mobile Pages

January 14, 2019 | IT  Perl 

Nun bieten fast alle Webseiten ihren Content in Form von Accelerated Mobile Pages an, um bei Google und Mobilgeräten zu punkten. Diese Seiten sind aber auch sehr gut in w3m darstellbar. :)

Zum Beispiel gibt es Leute, die mit newsboat oder newsbeuter ihre RSS-Feeds lesen. Diejenigen gehen dann möglicherweise auch mit w3m auf die Newsseite. Und das gelingt dank AMP nun sogar noch viel besser.

Dafür schaltet man einen Wrapper vor w3m. Bei Newsboat kann man das so machen:

browser "amp-magic.pl %u"

Der Wrapper extrahiert die AMP-Seite und übergibt diese an w3m:

#!/usr/bin/perl -wT
use strict;
# sudo apt install libdata-validate-uri-perl
use Data::Validate::URI;
# sudo apt install libwww-mechanize-perl
use WWW::Mechanize;
# sudo apt install libtaint-util-perl
use Taint::Util;

$ENV{'PATH'} = '/bin:/usr/bin';

# Validate user input
my $uriValidator = new Data::Validate::URI();
exit unless ( $ARGV[0] );
exit unless ( $ARGV[0] =~ m/^https?:\/\// );
exit unless ( $uriValidator->is_web_uri($ARGV[0]) );

# Load URL
my $success = 0;
my $url     = $ARGV[0];
my $mech    = WWW::Mechanize->new();
$mech->get($url);
exit unless ( $mech->success );

# Search AMP url
foreach my $link ( $mech->links() ) {
    next unless defined $link->tag();
    next unless defined $link->attrs();
    next unless ( $link->tag() eq "link" );
    my $attrs = $link->attrs();
    foreach my $attr ( keys %{$attrs} ) {
        next unless ( $attr eq "rel" );
        next unless ( $attrs->{$attr} eq "amphtml" );
        $success = 1;
        $url     = $link->url();
        last;
    }

    # Stop
    last if ( $success == 1 );
}

# Validate website input
exit unless ( $ENV{PATH} =~ m/[\/:a-z]+/ );
exit unless ( $url =~ m/^https?:\/\// );
exit unless ( $uriValidator->is_web_uri($url) );
untaint $url;

# Load URL in w3m
system( "w3m", "$url" );