You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
94 lines
3.2 KiB
Python
94 lines
3.2 KiB
Python
"""
|
|
Let's say you're interested in documents related to the topic "US Foreign Policy"
|
|
|
|
You can start with an "ask" (first just from the "Semantic Ask" interface) and use the condition:
|
|
|
|
[[Topic::US Foreign Policy]]
|
|
|
|
Press "Find results" and you get a lot of pages as result.
|
|
Then you would add the info you're interested in the "printout selection" box, and also make sure to sort the results with the part number to make sure document pages are in order.
|
|
|
|
Finally, click on the "Code" view and copy paste the code -- but
|
|
be careful NOT to copy the "{{#ask:" and the "}}" at the end.
|
|
|
|
This you can then paste into the API Sandbox to test it if you want...
|
|
OR just paste it into the code below as the "ask_query" variable.
|
|
|
|
https://hub.xpub.nl/sandbox/itchwiki/index.php/Special:ApiSandbox#action=ask
|
|
|
|
"""
|
|
|
|
# https://www.mediawiki.org/wiki/API:Main_page
|
|
# https://mwclient.readthedocs.io/en/latest/
|
|
|
|
import datetime
|
|
import json
|
|
|
|
import mwclient
|
|
from mwclient import Site
|
|
from secrets import BOTPASSWORD
|
|
|
|
|
|
site = Site("hub.xpub.nl", path="/sandbox/itchwiki/")
|
|
site.login("Bot", BOTPASSWORD)
|
|
|
|
ask_query = """
|
|
[[Topic::US Foreign Policy]]
|
|
|?Date
|
|
|?Part
|
|
|?Partof
|
|
|?Title
|
|
|format=broadtable
|
|
|limit=50
|
|
|offset=0
|
|
|link=all
|
|
|sort=Date,Title,Part
|
|
|order=asc,asc,asc
|
|
|headers=show
|
|
|searchlabel=... further results
|
|
|class=sortable wikitable smwtable
|
|
"""
|
|
|
|
# Tested in the APISandbox
|
|
# See: https://hub.xpub.nl/sandbox/itchwiki/index.php/Special:ApiSandbox#action=ask&format=json&query=%5B%5BTopic%3A%3AUS%20Foreign%20Policy%5D%5D%20%20%7C%3FPart%20%20%7C%3FPartof%20%20%7C%3FTitle%20%20%7C%3FDate%20%20%7Cformat%3Dbroadtable%20%20%7Climit%3D50%20%20%7Coffset%3D0%20%20%7Clink%3Dall%20%20%7Csort%3D%20%20%7Corder%3Dasc%20%20%7Cheaders%3Dshow%20%20%7Csearchlabel%3D...%20further%20results%20%20%7Cclass%3Dsortable%20wikitable%20smwtable&formatversion=2
|
|
# copy/paste the URL above and press "Make request" to see the results
|
|
|
|
response = site.api("ask", query=ask_query, format="json")
|
|
results = response['query']['results']
|
|
|
|
# Results is a dictionary where the keys are wiki names like "File:KSP Kilusan Vol 2 Nos 2 and 3-26.jpg"
|
|
# results[wikiname] is then another dictionary with all the results specific to that item
|
|
for wikiname in results:
|
|
item = results[wikiname]
|
|
|
|
# FOR DEBUGGING uncomment the print
|
|
# print (wikiname, json.dumps(item, indent=2))
|
|
|
|
date = datetime.date.fromtimestamp(int(item["printouts"]["Date"][0]['timestamp']))
|
|
date_raw = item["printouts"]["Date"][0]['raw']
|
|
title = item["printouts"]["Title"][0]["fulltext"]
|
|
part = int(item["printouts"]["Part"][0])
|
|
partof = int(item["printouts"]["Partof"][0])
|
|
|
|
r = site.api("query", prop="imageinfo", \
|
|
titles=wikiname, \
|
|
iiprop="url", \
|
|
iiurlwidth="80", \
|
|
formatversion=2)
|
|
iinfo = r['query']['pages'][0]['imageinfo'][0]
|
|
thumburl = iinfo['thumburl']
|
|
fullsizeurl = iinfo['url']
|
|
filepageurl = iinfo['descriptionurl']
|
|
# nb: the code lines *need* to be indented
|
|
# to stay INSIDE the loop
|
|
# the output text between the """ can break this rule
|
|
print ("""
|
|
<p>
|
|
<h3>{} ({})</h3>
|
|
<h2>{}, Part {} of {}</h2>
|
|
<a href="{}"><img src="{}"></a>
|
|
</p>
|
|
""".format(date, date_raw, title, part, partof, filepageurl, thumburl))
|
|
|
|
|