diff options
author | Marcus Lundblad <ml@dfupdate.se> | 2022-10-11 23:09:16 +0200 |
---|---|---|
committer | Marcus Lundblad <ml@dfupdate.se> | 2022-11-15 23:34:27 +0100 |
commit | dcf63e70f7768770ccf0435ec750a181048bce9a (patch) | |
tree | af6378a3795b1c43ad15d05671b7c36e45fc24bb | |
parent | bb2887e893ccdb8e0c3f9ff9ac69fb63eeeb663f (diff) | |
download | gnome-maps-dcf63e70f7768770ccf0435ec750a181048bce9a.tar.gz |
wikipedia: Add function to fetch Wikidata tag for an article
Add a function to fetch a Wikidata tag given a Wikipedia
article reference. This is to be used for automatically
fetching Wikidata tags when an article has been entered
in the POI editor.
-rw-r--r-- | src/wikipedia.js | 27 |
1 files changed, 27 insertions, 0 deletions
diff --git a/src/wikipedia.js b/src/wikipedia.js index 82237e77..90fe7bf3 100644 --- a/src/wikipedia.js +++ b/src/wikipedia.js @@ -224,6 +224,33 @@ export function fetchArticleInfoForWikidata(wikidata, defaultArticle, }); } +export function fetchWikidataForArticle(wiki, cancellable, callback) { + let lang = getLanguage(wiki); + let title = getHtmlEntityEncodedArticle(wiki); + let uri = 'https://www.wikidata.org/w/api.php'; + let encodedForm = Soup.form_encode_hash({ action: 'wbgetentities', + sites: lang + 'wiki', + titles: title, + format: 'json' }); + let msg = Soup.Message.new_from_encoded_form('GET', uri, encodedForm); + let session = _getSoupSession(); + + session.send_and_read_async(msg, GLib.PRIORIRY_DEFAULT, cancellable, + (source, res) => { + if (msg.get_status() !== Soup.Status.OK) { + log(`Failed to request Wikidata entities: ${msg.reason_phrase}`); + callback(null); + return; + } + + let buffer = session.send_and_read_finish(res).get_data(); + let response = JSON.parse(Utils.getBufferText(buffer)); + let id = Object.values(response.entities ?? [])?.[0]?.id; + + callback(id); + }); +} + function _onWikidataFetched(wikidata, defaultArticle, response, size, metadataCb, thumbnailCb) { let sitelinks = response?.entities?.[wikidata]?.sitelinks; |