summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMarcus Lundblad <ml@dfupdate.se>2022-10-11 23:09:16 +0200
committerMarcus Lundblad <ml@dfupdate.se>2022-11-15 23:34:27 +0100
commitdcf63e70f7768770ccf0435ec750a181048bce9a (patch)
treeaf6378a3795b1c43ad15d05671b7c36e45fc24bb
parentbb2887e893ccdb8e0c3f9ff9ac69fb63eeeb663f (diff)
downloadgnome-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.js27
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;