App-wdq

 view release on metacpan or  search on metacpan

script/wdq  view on Meta::CPAN

        }
        my @services;
        foreach my $var ( sort keys %textvar ) {
            my $s = <<SPARQL;
    SERVICE wikibase:label {
        bd:serviceParam wikibase:language "$OPT{language}" .
SPARQL

            if ( $textvar{$var}{label} ) {
                my $label = $var eq 'id' ? 'label' : $var . 'Label';
                $s .= "        ?$var rdfs:label ?$label .\n";
            }
            if ( $textvar{$var}{description} ) {
                my $descr = $var eq 'id' ? 'description' : $var . 'Description';
                $s .= "        ?$var schema:description ?$descr .\n";
            }
            push @services, "$s    }";
        }

        my $service = join "\n", @services;
        $query =~ s/}([^}]*)$/$service}\1/m;

        $namespace{$_} = $NAMESPACES{$_} for qw(bd rdfs schema wikibase);
    }

    my @prefixes = map { "PREFIX $_: <$namespace{$_}>" } sort keys %namespace;
    $query = join "\n", @prefixes, $query;

    my $sparql = RDF::Query->new($query);
    if ( !$sparql ) {
        if ( $OPT{'force'} ) {
            warning("SPARQL query seems invalid");
        }
        else {
            warning("invalid SPARQL query");
            exit 1;
        }
    }
    else {
        $query = $sparql->as_sparql;
        $query =~ s/^\s*{}\s*$//mg;                          # BUG IN RDF::Query
        $query =~ s/\n$//mg;
        $query =~ s/LANG\(LANG\(\?/LANGMATCHES(LANG(?/mg;    # BUG in RDF::Query
        $query =~ s/\t/    /mg;
    }

    if ( $OPT{'no-execute'} ) {
        say $query;
        return;
    }

    return $sparql
      ? ( $query, [ map { $_->name } @{ $sparql->parsed->{variables} } ] )
      : ($query);
}

sub http_get {
    my ( $url, %query ) = @_;

    if ( $OPT{response} ) {
        local ( @ARGV, $/ ) = $OPT{response};
        return <>;
    }

    require HTTP::Tiny;
    my $http = HTTP::Tiny->new(
        default_headers => { agent => "wdq/$VERSION" },
        timeout         => 30,
    );

    $query{format} = 'json';

    $url .= '?' . $http->www_form_urlencode( \%query );
    my $res = $http->get($url);

    if ( !$res->{success} ) {
        if ( $OPT{ignore} ) {
            return;
        }
        else {
            warning("HTTP request failed");
            say STDERR $res->{content};
            exit 1;
        }
    }

    $res->{content};
}

sub get_qid_from_sitelink {
    my $api   = "https://$_[0]/w/api.php";
    my $title = $_[1];

    my $res = http_get(
        $api,
        action    => 'query',
        prop      => 'pageprops',
        titles    => $title,
        redirects => 1
    );

    my $data = JSON->new->decode($res);
    my ($page) = values %{ $data->{query}->{pages} };
    return unless $page->{pageprops};
    return $page->{pageprops}->{wikibase_item};
}

sub get_lookup_query {
    my $id = shift;

    my $entity_id;

    if ( $id =~ $ENTITY_PATTERN ) {
        $entity_id = $+{id};
        $entity_id =~ s/Property://i;
    }
    else {
        # URL could be percent-encoded or not, so normalize
        my $uri = URI->new($id);
        if ( $uri and $uri->canonical =~ $SITELINK_PATTERN ) {
            my ( $base, $title ) = ( $+{base}, $+{title} );

 view all matches for this distribution
 view release on metacpan -  search on metacpan

( run in 1.317 second using v1.00-cache-2.02-grep-82fe00e-cpan-f5108d614456 )