Difference between revisions of "Codebase"

From Wikidocumentaries
Jump to navigation Jump to search
(Wikidocumentaries-API)
(Calls)
 
(32 intermediate revisions by the same user not shown)
Line 79: Line 79:
 
#: component: LandingPage
 
#: component: LandingPage
 
#
 
#
#: path: '/wikipedia/:language/:topic'
+
#: path: '/wikipedia/:'''language'''/:'''topic''''
 
#: component: MainPage
 
#: component: MainPage
 
#
 
#
#: path: '/:wikidata/:language?/:topic?'
+
#: path: '/:'''wikidata'''/:'''language'''?/:'''topic'''?'
 
#: name: 'TopicPage'
 
#: name: 'TopicPage'
 
#: component: MainPage
 
#: component: MainPage
Line 88: Line 88:
 
==Wikidocumentaries-API==
 
==Wikidocumentaries-API==
 
get
 
get
* /wiki
+
=== /wiki ===
** var language = req.query.language;
+
app.get('/wiki', function(req, '''res''')
** var topic = req.query.topic;
+
* var '''language''' = req.query.language
** var wikidata = req.query.wikidata;
+
* var '''topic''' = req.query.topic
* /wiki/items/by/latlon
+
* var '''wikidata''' = req.query.wikidata
* /images
+
* var wikidataByItemIdPromise('''wikidata''') - ''Retrieve all data from Wikidata based on a QID''
* /basemaps
+
** var requestConfig
* /geocode
+
*** baseURL: "https://www.wikidata.org/w/api.php"
 +
*** method: "get"
 +
*** responseType: 'json'
 +
*** headers: 'Api-User-Agent': process.env.WIKIDOCUMENTARIES_API_USER_AGENT
 +
*** params: action: "wbgetentities", ids: '''wikidata''', format: "json"
 +
** return axios.request(requestConfig).then((response) =>
 +
*** var '''item'''=response.data.entities['''wikidata''']
 +
*** combineResults('''res''', '''language''', '''wikidata''', '''item''')
 +
* var getWikidataItemIDPromise() - ''Get the QID based on a Wikipedia article name and language''
 +
** var requestConfig
 +
*** baseURL: "https://" + '''language''' + ".wikipedia.org/w/api.php"
 +
*** method: "get"
 +
*** responseType: 'json'
 +
*** headers: 'Api-User-Agent': process.env.WIKIDOCUMENTARIES_API_USER_AGENT
 +
*** params: action: "query", prop: "pageprops", ppprop: "wikibase_item", redirects: "resolve", titles: '''topic''', format: "json"
 +
** return axios.request(requestConfig).then((response) =>
 +
*** if (response.data.query != undefined)
 +
**** var key=Object.keys(response.data.query.pages)[0]
 +
**** var page=response.data.query.pages[key]
 +
**** if (page["pageprops"] != undefined && page["pageprops"]["wikibase_item"]!=undefined)
 +
***** wikidata=page["pageprops"]["wikibase_item"]
 +
***** wikidataByItemIdPromise(wikidata) - ''Loop back to make the Wikidata query''
 +
 
 +
====Functions====
 +
* combineResults('''res''', '''language''', wikidataItemID, wikidataItemResponse)
 +
** wikipediaSummaryPromise()
 +
** wikipediaHTMLPromise()
 +
** axios.all([wikipediaSummaryPromise(), wikipediaHTMLPromise(), wikidataItemResponse ])
 +
*** .then(axios.spread(function (wikipediaSummaryResponse, wikipediaHTMLResponse, wikidataItemResponse )
 +
*** .then((responseData)
 +
* convertToWikidocumentariesHTML(origHTML, '''topic''', '''language''')
 +
* findLabel(entities, id, language)
 +
 
 +
=== /wiki/items/by/latlon ===
 +
* var '''language''' = req.query.language;
 +
* var '''topic''' = req.query.topic;
 +
* var requestConfig
 +
**baseURL: 'https://query.wikidata.org/'
 +
** url: '/bigdata/namespace/wdq/sparql?query=SELECT%3Fitem(SAMPLE(%3Fitem_label)as%3Flabel)(SAMPLE(%3Flocation)as%3Flocation)WHERE%7BSERVICE%20wikibase%3Aaround%7B%3Fitem%20wdt%3AP625%3Flocation.bd%3AserviceParam%20wikibase%3Acenter"Point(' + req.query.lon + '%20' + req.query.lat + ')"%5E%5Egeo%3AwktLiteral.%20bd%3AserviceParam%20wikibase%3Aradius"' + req.query.radius / 1000 + '".%7DOPTIONAL%7B%3Fitem%20rdfs%3Alabel%3Fitem_label.%7D%7DGROUP%20BY%20%3Fitem'
 +
** timeout: 20000
 +
** method: "get"
 +
**params: format: 'json'
 +
* Response: wikiItems.push for each response.data.results.bindings
 +
** id: id,
 +
** title: response.data.results.bindings[i].label.value,
 +
** lat: Number(lat)
 +
** lon: Number(lon)
 +
 
 +
=== /images ===
 +
 
 +
Parameters
 +
* language
 +
* topic
 +
* commons_category
 +
 
 +
Not in use
 +
* lat
 +
* lon
 +
* maxradius
 +
 
 +
====Called from====
 +
 
 +
====Calls====
 +
 
 +
=== /basemaps ===
 +
=== /geocode ===

Latest revision as of 10:04, 12 February 2019

Navigate the codebase

Global variables

wikidocumentaries

Reads all values at time of page load from Wikipedia and Wikidata and prepares for the app. Stored, updated add addressed at @/store/store.js

  • title - Wikidata title in the user's language. Add a fallback option and create a new property with knowledge about the original value (boolean exists or empty data).
  • description - Wikidata title in the user's language. Add a fallback option and create a new property with knowledge about the original value (boolean exists or empty data).
  • headerImageURL
  • wikipedia
    • excerptHTML - summary part of the Wikipedia article
    • remainingHTML - remaining part of the Wikipedia article as a separate object.
    • wikipediaURL - link to the Wikipedia article in the user's language
  • wikidata
    • id
    • instance_of
      • id
      • value
      • url
    • statements
      • id
      • label
      • value - This returns a string for an object, and the QID is only in the URL. The QID should be extracted already before this?
      • url
      • dates
  • images
    • id
    • source
    • imageURL
    • title
    • authors
    • institutions
    • infoURL
    • location
    • geoLocations
    • year
    • license
  • geo
    • location
    • admin
  • topicStartYear

basemaps

  • id
  • title
  • imageURL
  • year
  • server
  • warperID
  • municipality
  • country

state

Router

  1. path: '/dev'
    name: 'DevPage'
    component: devpage
  2. path: '/'
    name: 'LandingPage'
    component: LandingPage
  3. path: '/wikipedia/:language/:topic'
    component: MainPage
  4. path: '/:wikidata/:language?/:topic?'
    name: 'TopicPage'
    component: MainPage

Wikidocumentaries-API

get

/wiki

app.get('/wiki', function(req, res)

  • var language = req.query.language
  • var topic = req.query.topic
  • var wikidata = req.query.wikidata
  • var wikidataByItemIdPromise(wikidata) - Retrieve all data from Wikidata based on a QID
    • var requestConfig
      • baseURL: "https://www.wikidata.org/w/api.php"
      • method: "get"
      • responseType: 'json'
      • headers: 'Api-User-Agent': process.env.WIKIDOCUMENTARIES_API_USER_AGENT
      • params: action: "wbgetentities", ids: wikidata, format: "json"
    • return axios.request(requestConfig).then((response) =>
      • var item=response.data.entities[wikidata]
      • combineResults(res, language, wikidata, item)
  • var getWikidataItemIDPromise() - Get the QID based on a Wikipedia article name and language
    • var requestConfig
      • baseURL: "https://" + language + ".wikipedia.org/w/api.php"
      • method: "get"
      • responseType: 'json'
      • headers: 'Api-User-Agent': process.env.WIKIDOCUMENTARIES_API_USER_AGENT
      • params: action: "query", prop: "pageprops", ppprop: "wikibase_item", redirects: "resolve", titles: topic, format: "json"
    • return axios.request(requestConfig).then((response) =>
      • if (response.data.query != undefined)
        • var key=Object.keys(response.data.query.pages)[0]
        • var page=response.data.query.pages[key]
        • if (page["pageprops"] != undefined && page["pageprops"]["wikibase_item"]!=undefined)
          • wikidata=page["pageprops"]["wikibase_item"]
          • wikidataByItemIdPromise(wikidata) - Loop back to make the Wikidata query

Functions

  • combineResults(res, language, wikidataItemID, wikidataItemResponse)
    • wikipediaSummaryPromise()
    • wikipediaHTMLPromise()
    • axios.all([wikipediaSummaryPromise(), wikipediaHTMLPromise(), wikidataItemResponse ])
      • .then(axios.spread(function (wikipediaSummaryResponse, wikipediaHTMLResponse, wikidataItemResponse )
      • .then((responseData)
  • convertToWikidocumentariesHTML(origHTML, topic, language)
  • findLabel(entities, id, language)

/wiki/items/by/latlon

  • var language = req.query.language;
  • var topic = req.query.topic;
  • var requestConfig
    • baseURL: 'https://query.wikidata.org/'
    • url: '/bigdata/namespace/wdq/sparql?query=SELECT%3Fitem(SAMPLE(%3Fitem_label)as%3Flabel)(SAMPLE(%3Flocation)as%3Flocation)WHERE%7BSERVICE%20wikibase%3Aaround%7B%3Fitem%20wdt%3AP625%3Flocation.bd%3AserviceParam%20wikibase%3Acenter"Point(' + req.query.lon + '%20' + req.query.lat + ')"%5E%5Egeo%3AwktLiteral.%20bd%3AserviceParam%20wikibase%3Aradius"' + req.query.radius / 1000 + '".%7DOPTIONAL%7B%3Fitem%20rdfs%3Alabel%3Fitem_label.%7D%7DGROUP%20BY%20%3Fitem'
    • timeout: 20000
    • method: "get"
    • params: format: 'json'
  • Response: wikiItems.push for each response.data.results.bindings
    • id: id,
    • title: response.data.results.bindings[i].label.value,
    • lat: Number(lat)
    • lon: Number(lon)

/images

Parameters

  • language
  • topic
  • commons_category

Not in use

  • lat
  • lon
  • maxradius

Called from

Calls

/basemaps

/geocode