diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..1882fbc --- /dev/null +++ b/.gitignore @@ -0,0 +1,5 @@ +_drafts +_site + +# Rakefile junk +temp.pgn diff --git a/Rakefile b/Rakefile new file mode 100644 index 0000000..d51b88f --- /dev/null +++ b/Rakefile @@ -0,0 +1,83 @@ +# -*- coding: utf-8 -*- +require 'rake' +tournament='autumn2013' + +# Fix the game date in PNG: YYYY-MM-DD -> YYYY.MM.DD +def fix_date + str = File.open('temp.pgn', 'r') { |f| f.read } + parts = str.partition /^\[Date \"\d{4}-\d{2}-\d{2}\"\]$/ + if parts[1].empty? + puts "The game date is already correct" + else + parts[1].gsub! '-', '.' + File.open('temp.pgn', 'w+') do |f| + f.write(parts[0] + parts[1] + parts[2]) + end + puts "The game date corrected" + end +end + +# Return the directory name to put PGN file in +def pgn_dir + str = File.open('temp.pgn', 'r') { |f| f.read } + + date = str.scan(/^\[Date \"(.*)\"\]$/)[0][0] + date.gsub! '-', '.' # if date has not been corrected + white = str.scan(/^\[White \"(.*)\"\]$/)[0][0] + black = str.scan(/^\[Black \"(.*)\"\]$/)[0][0] + + dir = date + ' — ' + white + ' vs. ' + black + return dir +end + +# Return the file name to move PGN file to +def pgn_file dir + file = (Dir.entries(dir).length - 1).to_s + '.pgn' + if File.exists? (dir + '/' + file) + abort "Something wrong: PGN file already exists" + end + file +end + +namespace :pgn do + desc "Parse a web page of lichess.org and save the PGN to temp file" + task :get do |t, args| + require 'nokogiri' + require 'open-uri' + + doc = Nokogiri::HTML open ENV['url'] + link = doc.css('a.view_pgn_toggle').first + pgn_url = 'http://lichess.org' + link['href'] + str = URI.parse(pgn_url).read + File.open('temp.pgn', 'w') { |f| f.write str } + fix_date # fix the game date + end + + desc "Move PNG into the directory of destination" + task :mv do + require 'fileutils' + + tour = ('0' + ENV['tour'])[-2..-1] # change `1' -> `01' and so on + dir = tournament + '/tour_' + tour + '/' + pgn_dir + if Dir.exists? dir + puts "PGN directory exists" + else + puts "Directory \"#{dir.shellescape}\" doesn't exist. Create it?" + answer = $stdin.gets.chomp + if ['Yes', 'yes', 'y'].include? answer + FileUtils.mkdir_p dir + else + abort "PGN directory wasn't created" + end + end + dest = dir + '/' + pgn_file(dir) + puts "Moving PGN file to \"#{dest.shellescape}\"" + FileUtils.mv('temp.pgn', dest) + end + + desc "Download and move PGN file at once" + task :create do + Rake::Task['pgn:get'].invoke + Rake::Task['pgn:mv'].invoke + end +end