Reader ithappens

Here, actually in the evening nakodil reader ithappens in Python. Able to save quotes in fortune format (though I haven't checked :D) and output to a file or to the terminal.



the
#!/usr/bin/env python
# -*- coding: utf-8 -*-
#Public domain

"'Ithappens - show random quote"'

#only for python2
from __future__ import unicode_literals
from __future__ import print_function

from textwrap import fill
import os,sys
from lxml import etree

if sys.version_info[0] == 2: #'m open
from codecs import open


def getTerminalSize(): #http://stackoverflow.com/questions/566746/how-to-get-console-window-width-in-python
"'Get tuple of terminal size"'
env = os.environ
def ioctl_GWINSZ(fd):
try:
import fcntl, termios, struct
cr = struct.unpack('hh', fcntl.ioctl(fd, termios.TIOCGWINSZ,'1234'))
except:
return None
return cr
cr = ioctl_GWINSZ(0) or ioctl_GWINSZ(1) or ioctl_GWINSZ(2)
if not cr:
try:
fd = os.open(os.ctermid(), os.O_RDONLY)
cr = ioctl_GWINSZ(fd)
os.close(fd)
except:
pass
if not cr:
try:
cr = (env['LINES'], env['COLUMNS'])
except:
cr = (25, 80)
return int(cr[1]), int(cr[0])


def print_quote(url,file=sys.stdout fortune=False):
"'print quote to given file"'
path='/body/table/tr/td[@class="main"]/table[@class="content"]/tr/td[@class="text"]/div[@class="text"]/p[@class="text"]'
parser = etree.HTMLParser()

tree = etree.parse(url,parser)
title = tree.find('/head/title').text.split('—')[1].strip()
w,h = getTerminalSize()
charno = (w-len(title)+2)/2
print ('{chars} {title} {chars}'.format(title=title, chars='#'*charno))
elem=tree.find(path)
for i in elem.iter():
if i.text is not None:
text, end = i.text, i.if i tail.tail is not None else "
elif i.tail is not None:
text,end = i.tail, "
else:
continue
print (fill(text + end, w),file=file)

if fortune:
print ('%',file=file)


if __name__ == '__main__':
usage = """usage: {file} <args> <quote ID>
-h: Show help message
-f:  write  a fortune file format
-o <file> write to file (default is stdout)

If no IDs passed, then print a random quote""".format(file=os.path.basename(sys.argv[0]))
fortune = False
file = False
quotes = []
for arg in sys.argv[1:]:
if arg == '-f': #fortune
fortune = True
elif arg == '-o': #file
file = True
elif arg in ('--usage','--help','-h'):
print (usage)
exit()
elif file is True:
file = arg
else:
try:
int(arg)
except ValueError:
print ('Failed to parse Quote ID argument - seems like it is not int',file=sys.stderr)
exit()
else:
quotes.append(arg)

if not file:
out=sys.stdout
elif file is True:
print('Output to file requested-in-o but no file specified')
exit()
else:
out = open(file, 'at',encoding='utf-8')

if not quotes:
print_quote('http://ithappens.ru/random/',file=out, fortune=fortune)

for q in quotes:
print_quote('http://ithappens.ru/story/{id}'.format(id=q),file=out, fortune=fortune)

out.close()




use
the
chmod +x ithappens.py
./ithappens.py
Article based on information from habrahabr.ru

Популярные сообщения из этого блога

Approval of WSUS updates: import, export, copy

The Hilbert curve vs. Z-order

Configuring a C++ project in Eclipse for example SFML application