Usuari:TronaBot/Codi:Imatges

De la Viquipèdia, l'enciclopèdia lliure
#-*- coding:utf8 -*-
"""
Script que recull l'ús i abús d'imatges amb drets d'autor.

Usuari:TronaBot/log:Imatges no lliures en més d'un article
Usuari:TronaBot/log:Imatges no usades
Usuari:TronaBot/log:Imatges no lliures en espais inapropiats
"""
import argparse, codecs as file, json, os, re, sys
sys.path.append("E:/Never Share/my Python scripts/pywikilib/")
import catlib, wikipedia as pywikibot
from query import GetData as api


def colored(text, color="lightblue"):
	return u"\03{%s}%s\03{default}" % (color, text)

class File(object):
	def __init__(self, filename):
		self.filename = os.path.join(os.getcwd(), "logs", "%s.log" % filename)

	def write_mode(self):
		return file.open(self.filename, "w", "utf8")

	def save(self, data):
		json.dump(data, self.write_mode(), encoding="utf8", indent=4)

	def read_mode(self):
		file.open(self.filename, "r", "utf8")

	def read(self):
		return json.load(self.read_mode())

def file_usage_in_ns(page_title, ns=0):
	params ={
		"action": "query",
		"list": "imageusage",
		"iutitle": page_title,
		"iunamespace": ns,
		"iulimit": "max"
	}
	data = api(params)
	pages = data['query']['imageusage']
	return len(pages)

def file_usage(page_title):
	params ={
		"action": "query",
		"generator": "imageusage",
		"giutitle": page_title,
		"giulimit": "max",
		"indexpageids":""
	}
	q = api(params)
	pages = q['query']['pages']
	pageids = q['query']['pageids']
	unapropiate_ns=articles=all_pages=[]
	for pageid in pageids:
		page = pages[pageid]['title']
		all_pages.append(page)
		if pages[pageid]["ns"] == 0:
			articles.append(page)
		if pages[pageid]["ns"] != 0:
			unapropiate_ns.append(page)
	return {"all": all_pages, "art": articles, "alt": unapropiate_ns}

def categories():
	categories = (
		u"Categoria:Imatges d'ús legítim",
		u"Categoria:Imatges amb llicència d'ús amb restriccions comercials",
		u"Categoria:Imatges amb informació desconeguda"
	)
	for category in categories:
		category = catlib.Category(site, category)
		for image in category.articlesList(recurse=True):
			if image.namespace() != 6: continue
			yield pywikibot.ImagePage(site, image.title())

def scan_files():
	user = site.loggedInAs()
	page_title = u"Usuari:%s/log:Imatges no usades" % user
	not_used =  set()
	excess_usage = unapropiate = {}
	images=0
	#mode de recerca recursiu per analitzar cada imatge
	for image in categories():
		pywikibot.output(u"%s" % colored(image.title(asLink=True)), newline=False)
		images+=1
		usage = file_usage(image.title())
		if len(usage['all']) == 0:
			not_used.add(image.title())
		if len(usage['art']) > 1:
			excess_usage.update({image.title(): usage['art']})
		if len(usage['alt']) > 0:
			unapropiate.update({image.title(): usage['alt']})
		pywikibot.output(" %i [%i] [%i] [%i]" % (
				len(usage['all']),
				len(not_used),
				len(excess_usage),
				len(unapropiate)
			)
		)
	unused_log = File("fitxers_no_usats")
	unused_log.save(not_used)
	excess_log = File("fitxers_amb_mes_d_un_article")
	excess_log.save(excess_usage)
	unapropiate_log = File("espai_inapropiat")
	unapropiate_log.save(unapropiate)

if __name__ == '__main__':
	site = pywikibot.getSite()
	args = argparse.ArgumentParser()
	args.add_argument("-s", "--scan", action="store_true", dest="scanfiles")
	params = args.parse_args()

	if params.scanfiles:
		scan_files()

	pywikibot.stopme()