Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Searching Wikipedia using API

I want to search Wikipedia using the query action. I am using this url:

http://en.wikipedia.org/w/api.php?action=query&format=json&list=search&srsearch=apple

That works but I want to get into the first result of the search. How can I do that?

Note: That url works fine when there is only one result.. I just need the title and some short description.

like image 754
Muhammad Ashraf Avatar asked Dec 13 '14 10:12

Muhammad Ashraf


People also ask

Is there an API for Wikipedia?

The Wikimedia API lets you build apps and scripts that access content from Wikipedia and other Wikimedia projects.

How does Wikipedia API work?

Your program sends requests to the API to get access to wiki features. For example, log in to a wiki, create and edit a page, search for a title, search for content text, or parse content. The Action API is available for third-party developers, Wikimedia extension developers, and wiki site administrators.

How do I find my Wikipedia page ID API?

In the desktop view of Wikipedia, in the default skin and most others, the left-hand panel has a "Wikidata item" link, under " tools ". Copy the URL of that link, paste it into a text editor, and read (or copy) the ID from it.

How do I search a URL in Wikipedia?

Add Wikipedia as a search engine, choosing a keyword (which selects Wikipedia as the search engine from the address bar), and enter https://en.wikipedia.org/wiki/Special:Search/%s as the URL. NB. Wikipedia may be automatically suggested under Other Search Engines.

How do I search Wikipedia with an app?

Here’s how it works: a user can type a search query into an input field in the app. The query is sent to Wikipedia and results are displayed on the page in the format of a regular search engine. You can checkout the live demo here.

What is an API?

Here's a crash course on APIs using the Wikipedia API. Get a grasp on how to use APIs for your application. What exactly is an API? API stands for Application Programming Interface, and simply put, it allows your application to work with other applications, usually in the form of JSON data.

Why do we asynchronously send a request to Wikipedia?

We will asynchronously send our request the the Wikipedia API server so that any code below the request can continue to run, while the request is being processed in the background. Generally speaking, when dealing with API calls, asynchronous requests are the preferred method.

How do I pull data from Wikipedia?

Let's say that you wanted your web application to pull in data from a source like Wikipedia. With an API, we can programatically pull the information right from Wikipedia, and format it to fit our project, app, or website nicely - only showing the information that we want. First, let's setup our Wikipedia API endpoint. Woah, woah, woah. Slow down!


3 Answers

I don't think you can do both in one query.

1. To get the first result, use the Opensearch API.

https://en.wikipedia.org/w/api.php?action=opensearch&search=zyz&limit=1&namespace=0&format=jsonfm

https://en.wikipedia.org/w/api.php
?action=opensearch
&search=zyz          # search query
&limit=1             # return only the first result
&namespace=0         # search only articles, ignoring Talk, Mediawiki, etc.
&format=json         # jsonfm prints the JSON in HTML for debugging.

This will return:

[
    "Zyz",
    [
        "Zyzomys"
    ],
    [
        ""
    ],
    [
        "https://en.wikipedia.org/wiki/Zyzomys"
    ]
]

2. You now have the article name of the first search result. To get the article's first paragram (or description, as you call it), see my answer here: https://stackoverflow.com/a/19781754/908703

like image 167
octosquidopus Avatar answered Oct 09 '22 23:10

octosquidopus


Here is the my solution:

// Created By Pawan Mall | www.pawanmall.net
$(document).ready(function() {
  $('#sTerm').focus();
  $('#resultArea').hide();
  $('#searchArticle').on('click', function() {
    $('#resultArea').show();
    searchTerm = $('#sTerm').val();
    let surl = 'https://en.wikipedia.org/w/api.php?action=query&prop=extracts&origin=*&format=json&generator=search&gsrnamespace=0&gsrlimit=1&gsrsearch=' + searchTerm;
    $.ajax({
      url: surl,
      header: {
        'Access-Control-Allow-Origin' : '*',
        'Content-Type': 'application/json'
      },
      method: 'GET',
      dataType: 'jsonp',
      data: '',
      beforeSend: function(){
        // $("#loader").show();
        $('#resultArea').html('<div class="text-center"><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" style="margin: auto; background: #fff; display: block;" width="25%" height="25%" viewBox="0 0 100 100" preserveAspectRatio="xMidYMid"><g transform="translate(50 50)"><g transform="scale(0.7)"><g transform="translate(-50 -50)"><g transform="translate(-3.20642 -20)"><animateTransform attributeName="transform" type="translate" repeatCount="indefinite" dur="1s" values="-20 -20;20 -20;0 20;-20 -20" keyTimes="0;0.33;0.66;1"></animateTransform><path fill="#5699d2" d="M44.19 26.158c-4.817 0-9.345 1.876-12.751 5.282c-3.406 3.406-5.282 7.934-5.282 12.751 c0 4.817 1.876 9.345 5.282 12.751c3.406 3.406 7.934 5.282 12.751 5.282s9.345-1.876 12.751-5.282 c3.406-3.406 5.282-7.934 5.282-12.751c0-4.817-1.876-9.345-5.282-12.751C53.536 28.033 49.007 26.158 44.19 26.158z"></path><path fill="#1d3f72" d="M78.712 72.492L67.593 61.373l-3.475-3.475c1.621-2.352 2.779-4.926 3.475-7.596c1.044-4.008 1.044-8.23 0-12.238 c-1.048-4.022-3.146-7.827-6.297-10.979C56.572 22.362 50.381 20 44.19 20C38 20 31.809 22.362 27.085 27.085 c-9.447 9.447-9.447 24.763 0 34.21C31.809 66.019 38 68.381 44.19 68.381c4.798 0 9.593-1.425 13.708-4.262l9.695 9.695 l4.899 4.899C73.351 79.571 74.476 80 75.602 80s2.251-0.429 3.11-1.288C80.429 76.994 80.429 74.209 78.712 72.492z M56.942 56.942 c-3.406 3.406-7.934 5.282-12.751 5.282s-9.345-1.876-12.751-5.282c-3.406-3.406-5.282-7.934-5.282-12.751 c0-4.817 1.876-9.345 5.282-12.751c3.406-3.406 7.934-5.282 12.751-5.282c4.817 0 9.345 1.876 12.751 5.282 c3.406 3.406 5.282 7.934 5.282 12.751C62.223 49.007 60.347 53.536 56.942 56.942z"></path></g></g></g></g></svg></div>')
       },
      success: function(data){
        // console.log(data.query.pages);
        dataNum = Object.keys(data.query.pages)[0];
        $('#resultArea').empty();
        let newTitle = '<h1 class="alert alert-info text-center"><strong>'+data.query.pages[dataNum].title+'</strong></h1>';
        $('#resultArea').html(`${newTitle}<div>${data.query.pages[dataNum].extract}</div>`);
        console.log(data);
      },
      complete: function(){
        $('#sTerm').val('');
        $('#sTerm').focus();
      }
    });
  });
});
<link href="https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/4.4.1/css/bootstrap.min.css" rel="stylesheet"/>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<h1 class="p-5 alert alert-dark text-center">
  <img src="https://upload.wikimedia.org/wikipedia/commons/thumb/8/80/Wikipedia-logo-v2.svg/225px-Wikipedia-logo-v2.svg.png" class="w-25" />
  <p>Search Article on Wikipedia via  Wikipedia  Search API</p>
</h1>  
<div class="mt-2 p-5">
            <div class="row pb-4">
              <div class="col-md-10">
                <input type="text" id="sTerm" class="form-control" placeholder="Type here to search an article on wikipedia... By Pawan Mall | www.pawanmall.net">
              </div>
              <div class="col-md-2">
                <button type="button" id="searchArticle" class="btn btn-primary btn-block">Search</button>
              </div>
            </div>
            <div id="resultArea" class="form-control border-0" contenteditable="false"></div>
          </div>
like image 21
Code GuruDev Avatar answered Oct 09 '22 23:10

Code GuruDev


actually the wikipedia json api works with a right query only, so I recommend to use the wikipedia search and crawl the actual article and parse it with BeautifulSoup

https://en.wikipedia.org/w/index.php?search=QUERY&title=Special:Search&fulltext=Search

and also there is module call wikipedia does this for you

like image 2
Jeeva Avatar answered Oct 09 '22 22:10

Jeeva