- import pywikibot
- from pywikibot import pagegenerators as pg
- import requests
- from urllib.parse import urlparse
- import os
- QUERY="""
- SELECT DISTINCT ?item WHERE {
- ?item wdt:P1324 ?repo FILTER CONTAINS(str(?repo), "github.com").
- FILTER NOT EXISTS { ?item p:P2992 ?qa }
- SERVICE wikibase:label {
- bd:serviceParam wikibase:language "en" .
- }
- }
- """
- wikidata_site = pywikibot.Site("wikidata", "wikidata")
- P_described_at_url = "P973"
- P_archive_url = "P1065"
- P_software_quality_assurance = "P2992"
- Q_continuous_integration = "Q965769"
- for item in pg.WikidataSPARQLPageGenerator(QUERY, site=wikidata_site):
- print(str(item))
- item_dict = item.get()
- clm_dict = item_dict["claims"]
- for url in [ claim.getTarget() for claim in clm_dict['P1324'] ]:
- if 'github.com' not in url:
- continue
- path = os.path.normpath(urlparse(url).path)[1:]
- if len(path.split("/", -1)) != 2:
- print("SKIP: GET " + url + " path does not have exactly two elements")
- continue
- if requests.get(url).status_code != requests.codes.ok:
- print("ERROR: GET " + url + " failed")
- continue
- travis = url + "/blob/master/.travis.yml"
- if requests.get(travis).status_code != requests.codes.ok:
- print("SKIP: GET " + travis + " not found")
- continue
- travis_ci = "https://travis-ci.org/" + path
- if requests.get(travis_ci).status_code != requests.codes.ok:
- print("SKIP: GET " + travis_ci + " not found")
- continue
- print("FOUND " + travis + " and " + travis_ci)
- continuous_integration = pywikibot.ItemPage(wikidata_site, Q_continuous_integration, 0)
- software_quality_assurance = pywikibot.Claim(wikidata_site, P_software_quality_assurance, 0)
- software_quality_assurance.setTarget(continuous_integration)
- item.addClaim(software_quality_assurance)
- described_at_url = pywikibot.Claim(wikidata_site, P_described_at_url, 0)
- described_at_url.setTarget(travis)
- software_quality_assurance.addQualifier(described_at_url)
- archive_url = pywikibot.Claim(wikidata_site, P_archive_url, 0)
- archive_url.setTarget(travis_ci)
- software_quality_assurance.addQualifier(archive_url)