13 Commits
Author SHA1 Message Date
golderweb 34c0835d22 Merge branch 'release-0.1' 2018-10-09 08:42:34 +02:00
golderweb 4395cb42eb Prepare stable release v0.1 2018-10-09 08:41:14 +02:00
golderweb 3cd639eef9 Move configuration vars to jogobot config 2018-10-05 20:24:00 +02:00
golderweb c35c296e92 Do not track gnuplotscripts in this repo
Since they are more config, we will use separate repo
2018-10-05 16:14:48 +02:00
golderweb b3a0857ddd Fix typo in Euroexchange 2018-10-05 16:11:35 +02:00
golderweb 0477940fdf Define requirements
Installable via pip install -r requirements.txt
2018-10-05 14:46:50 +02:00
golderweb f9a39a6f49 Make it possible to run Bot with -always
To be able to run script unattended
2018-10-05 14:43:43 +02:00
golderweb 638d2b6a3d Do not raise Exception when image not exists
Just output a warning and go on with further jobs
2018-09-27 08:41:53 +02:00
golderweb 1d41e206c0 Fix deprecated calls to UploadRobot 2018-09-27 08:23:26 +02:00
golderweb a0377e1f80 Fix typo in upload comment 2018-09-26 16:00:03 +02:00
golderweb f4296d8410 Set upload warnings which can be ignored
We always upload existing images, so do not complain about this.
For testing purposes, also duplicates are normal
2018-09-25 16:59:50 +02:00
golderweb f28fad2edb Fix old var name 2018-09-25 16:59:19 +02:00
golderweb 5cf5c5a597 fix Pywikibot does not import specialbots by default 2018-09-25 16:32:25 +02:00
6 changed files with 46 additions and 122 deletions
View File
+9 -9
View File
@@ -1,9 +1,7 @@
# wiki-jogobot-euroexange
This is a [Pywikibot](https://www.mediawiki.org/wiki/Manual:Pywikibot) based [Wikipedia Bot](https://de.wikipedia.org/wiki/Wikipedia:Bots)
of [User:JogoBot](https://de.wikipedia.org/wiki/Benutzer:JogoBot) on the
[German Wikipedia](https://de.wikipedia.org/wiki/Wikipedia:Hauptseite).
# wiki-jogobot-euroexchange
This is a [Pywikibot](https://www.mediawiki.org/wiki/Manual:Pywikibot) based [Wikipedia Bot](https://commons.wikimedia.org/wiki/Commons:Bots)
of [User:JogoBot](https://commons.wikimedia.org/wiki/User:JogoBot) on
[Wikimedia Commons](https://commons.wikimedia.org/wiki/Main_Page).
## Requirements
* Python 3.4+ (at least it is only tested with those)
@@ -12,14 +10,16 @@ of [User:JogoBot](https://de.wikipedia.org/wiki/Benutzer:JogoBot) on the
## Usage
```
python euroexange.py
python euroexchange.py
```
## Versions
*
* 0.1
- First stable release to be run on wmflabs
- Download recent sourcefile, generate images based on json job list and upload them
## Bugs
[jogobot-euroexange Issues](https://git.golderweb.de/wiki/jogobot-euroexange/issues)
[jogobot-euroexchange Issues](https://git.golderweb.de/wiki/jogobot-euroexchange/issues)
## License
GPLv3+
@@ -29,13 +29,14 @@ import hashlib
import json
import pywikibot
import pywikibot.specialbots
import jogobot
class EuroExangeBotJob():
class EuroExchangeBotJob():
"""
Used for EuroExangeBot job queue
Used for EuroExchangeBot job queue
"""
def __init__( self, **kwargs ):
@@ -50,24 +51,23 @@ class EuroExangeBotJob():
self.image = "TEST_{}".format(self.image)
class EuroExangeBot( pywikibot.bot.BaseBot ):
class EuroExchangeBot( pywikibot.bot.BaseBot ):
base_dir = os.path.dirname(os.path.realpath(__file__)) + "/.."
working_dir = os.path.dirname(os.path.realpath(__file__)) + "/../wdir"
gnuplot_script_dir = os.path.dirname(os.path.realpath(__file__)) + \
"/../gnuplot_scripts"
gnuplot = "/usr/bin/gnuplot"
data_source = "http://www.ecb.int/stats/eurofxref/eurofxref-hist.zip"
zip_file = "eurofxref-hist.zip"
csv_file = "eurofxref-hist.csv"
upload_comment = "Bot: ([[User:Jogobot/Euroexange|euroexange]]) update chart"
base_dir = os.path.expanduser(jogobot.config["euroexchange"]["base_dir"])
working_dir = os.path.join( base_dir, "working_dir" )
gnuplot_script_dir = os.path.join(base_dir, "gnuplot_scripts")
gnuplot = jogobot.config["euroexchange"]["gnuplot_bin"]
data_source = jogobot.config["euroexchange"]["data_source"]
zip_file = jogobot.config["euroexchange"]["data_zip_filename"]
csv_file = jogobot.config["euroexchange"]["data_csv_filename"]
upload_comment = jogobot.config["euroexchange"]["upload_comment"]
def __init__( self, genFactory, **kwargs ):
# Init working directory
self.init_wdir()
super().__init__(*kwargs)
super().__init__(**kwargs)
def run(self):
@@ -206,7 +206,7 @@ class EuroExangeBot( pywikibot.bot.BaseBot ):
"""
Load jobs from json file
@returns Generator of EuroExangeBotJob objects
@returns Generator of EuroExchangeBotJob objects
@rtype generator
"""
@@ -216,7 +216,7 @@ class EuroExangeBot( pywikibot.bot.BaseBot ):
# yield each job
for job_args in jobs_js:
yield EuroExangeBotJob( **job_args )
yield EuroExchangeBotJob( **job_args )
def treat_job( self, job ):
@@ -224,7 +224,7 @@ class EuroExangeBot( pywikibot.bot.BaseBot ):
Handles working on specific jobs
@param job: Job to work on
@type job: EuroExangeBotJob
@type job: EuroExchangeBotJob
"""
# Store reference to current job in Bot obj
@@ -237,11 +237,13 @@ class EuroExangeBot( pywikibot.bot.BaseBot ):
self.current_job.filepage = pywikibot.page.FilePage(
pywikibot.Site(), job.image)
# Stop if file not jet exists
# Skip if file not yet exists
if not self.current_job.filepage.exists():
jogobot.output( "Work on Job {}".format( self.current_job.image),
"ERROR" )
raise pywikibot.NoPage( filepage )
jogobot.output( "Image {} does not exists on wiki, job skipped!".
format( self.current_job.image), "WARNING" )
return
#~ raise pywikibot.NoPage( self.current_job.filepage )
# Check if update is necessary
if self.image_update_needed():
@@ -286,7 +288,7 @@ class EuroExangeBot( pywikibot.bot.BaseBot ):
"""
@param job: Job to work on
@type job: EuroExangeBotJob
@type job: EuroExchangeBotJob
"""
cmd = shlex.split ( type(self).gnuplot + " " + os.path.realpath(
@@ -323,17 +325,19 @@ class EuroExangeBot( pywikibot.bot.BaseBot ):
"""
@param job: Job to work on
@type job: EuroExangeBotJob
@type job: EuroExchangeBotJob
"""
comment = type(self).upload_comment
filename = job.image
filepath = os.path.join(self.wdir, job.image)
keepFilename=True #set to True to skip double-checking/editing destination filename
verifyDescription=True #set to False to skip double-checking/editing description => change to bot-mode
ignoreWarning=False #set to True to skip warnings, Upload even if another file would be overwritten or another mistake would be risked
filepath = [ os.path.join(self.wdir, job.image) ]
keepFilename = True #set to True to skip double-checking/editing destination filename
verifyDescription = True #set to False to skip double-checking/editing description => change to bot-mode
ignoreWarning = [ "exists", "duplicate", ] #set to True to skip warnings, Upload even if another file would be overwritten or another mistake would be risked
targetSite = pywikibot.Site()
always = self.getOption("always")
aborts = True if self.getOption("always") else list()
bot = pywikibot.specialbots.UploadRobot(
filepath,
@@ -342,10 +346,12 @@ class EuroExangeBot( pywikibot.bot.BaseBot ):
keepFilename=keepFilename,
verifyDescription=verifyDescription,
ignoreWarning=ignoreWarning,
targetSite = targetSite
targetSite = targetSite,
always=always,
aborts=aborts,
)
bot.upload_image(debug=True)
bot.run()
def main(*args):
"""
@@ -377,7 +383,7 @@ def main(*args):
local_args, None )
# Init Bot
bot = jogobot.bot.init_bot( task_slug, None, EuroExangeBot, genFactory)
bot = jogobot.bot.init_bot( task_slug, None, EuroExchangeBot, genFactory, **subtask_args)
# Run bot
jogobot.bot.run_bot( task_slug, None, bot )
@@ -1,84 +0,0 @@
# based on code of [[User:Gorgo]]/[[:c:File:Euro exchange rate to TRY.svg]]
# gnuplot script for plotting eurofxref-hist.csv as obtained from
# http://www.ecb.int/stats/exchange/eurofxref/html/index.en.html
infile=system("echo $INFILE")
outfile=system("echo $OUTFILE")
# Start und Ende ermitteln (z.Zt. nur für Consolenausagabe)
stats infile every ::1 u (strptime("%Y-%m-%d",strcol(1))) nooutput
print ' -----Stats-(Timestamp)----'
print ' Start: ', strftime("%d. %B %Y",STATS_min)
print ' Ende: ', strftime("%d. %B %Y",STATS_max)
print ' --------------------------'
set label 'last update: ' . strftime("%Y-%m-%d",STATS_max) at graph 0.05, graph 0.9
#input
set timefmt "%Y-%m-%d"
set datafile missing 'N/A'
set datafile separator ','
#output
set key bottom right
set style data lines
set border 3 # Rahmen unten (Bit 1) und links (+ Bit 2)
unset grid # Gitterlinien verwenden
# Gitterlinienen per Hand setzen falls gewünscht
set style line 1 linetype rgb '#696969' linewidth 0.5 dashtype 0 # Def. Major-grid
set style line 2 linetype rgb '#C9C9C9' linewidth 0.5 dashtype 3 # def. Minor-grid
#set grid xtics mxtics # eventuell noxtics und nomxtics
set grid x2tics
set grid ytics mytics # eventuell noytics und nomytics
set grid back # Gitter im Hintergrund
set grid linestyle 1, linestyle 2 # Setzen des linestyle für Major u. Minor
# die Kalenderwochen-Markierung machen wir über x2 !!!
set xdata time
set x2data time
set format x '1. %b'
set xtics rotate by +15 center offset 0,-0.5
set format x2 ''
set xrange ['2018-01-01':'2019-01-01']
set x2range ['2018-01-01':'2019-01-01']
set x2tics '2018-01-01', 60 * 60 * 24 * 7
set x2tic scale 0
set xtics nomirror
unset mxtics
set xlabel '2018'
set ylabel 'TRY'
# set y2label 'TRY'
set format y '%.0f'
# set format y2 '%.0f'
set ytics 1
set mytics 5
set ytics nomirror
# Zebramuster
set style rect fillcolor lt -1 fillstyle solid 0.06 noborder
do for [i=1:12:2] {
marker_start=sprintf("2018-%1.2d-01",i)
marker_stop =sprintf("2018-%1.2d-01",i+1)
print 'setze grauen Marker: ' . marker_start . "-" . marker_stop
set object rectangle from marker_start,graph 0 to marker_stop, graph 1
}
## gnuplot for SVG - gnuplot 4.2 / Ubuntu 8.10
set term svg size 800,400 font "Arial,16"
set outp outfile
set style line 1 lt rgb 'blue' lw 1
#available currencies:
#first one is $2, second $3 and so on
#USD,JPY,BGN,CYP,CZK,DKK,EEK,GBP,HUF,LTL,LVL,MTL,PLN,ROL,RON,SEK,SIT,SKK,CHF,ISK,NOK,HRK,RUB,TRL,TRY,AUD,BRL,CAD,CNY,HKD,IDR,ILS,INR,KRW,MXN,MYR,NZD,PHP,SGD,THB,ZAR
plot \
infile \
usi 1:($26) axis x1y1 tit '1 EUR in TRY' lt rgb 'blue' lw 1,\
infile \
usi 1:($26) axis x1y1 notit w p lc rgb 'black' lt 1 lw 1.5 pt 7 ps 0.1 \
+2
View File
@@ -0,0 +1,2 @@
# jogobot
git+https://git.golderweb.de/wiki/jogobot.git#egg=jogobot