User:MDanielsBot/Task 1 source

From Wikidata
Jump to navigation Jump to search

Original python code:

import pywikibot
from pywikibot import pagegenerators
import random

toReplace     = "kategorija Wikimedije" # Then "razločitvena stran Wikimedije", then "seznam Wikimedije"
toReplaceWith = 'kategorija Wikimedie'  # Then "razločitvena stran Wikimedie" , then "seznam Wikimedie"
editSummary = "[[Wikidata:Requests for permissions/Bot/MDanielsBot|Bot task 1]]: replacing sl-language descriptions ([[:toolforge:editgroups/b/CB/" + "{:x}".format(random.randrange(0, 2**48)) + "|details]])"

site = pywikibot.Site("wikidata", "wikidata")
gen = pagegenerators.WikibaseItemGenerator(pywikibot.pagegenerators.SearchPageGenerator(toReplace, site=site, namespaces=0))

for item in gen:
        desc = item.get()['descriptions']
        if (('sl' in desc) and (desc['sl'] == toReplace)):
                item.editDescriptions({'sl': toReplaceWith}, summary=editSummary)

Then I switched to the much faster WikibaseJS-cli.

query for use with WikibaseJS-cli (quarry:query/74116):

SELECT
  CONCAT('Q', wbit_item_id, ' sl "seznam Wikimedie"')
FROM wbt_item_terms
  LEFT JOIN wbt_term_in_lang ON wbit_term_in_lang_id = wbtl_id
  LEFT JOIN wbt_type ON wbtl_type_id = wby_id
  LEFT JOIN wbt_text_in_lang ON wbtl_text_in_lang_id = wbxl_id
  LEFT JOIN wbt_text ON wbxl_text_id = wbx_id
WHERE wbtl_type_id = 2 # Description
  AND wbxl_language = 'sl'
  AND wbx_text = "seznam Wikimedije";

Output query results to txt, one per line.

Then: WikibaseJS-cli sh file:

#!/bin/bash

export NVM_DIR="$HOME/.nvm"
[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh"  # This loads nvm
[ -s "$NVM_DIR/bash_completion" ] && \. "$NVM_DIR/bash_completion"  # This loads nvm bash_completion

nvm use --lts
wd sd --summary "[[Wikidata:Requests for permissions/Bot/MDanielsBot|Bot task 1]]: replacing sl-language descriptions" --batch --no-exit-on-error < queryresults.txt