#!/usr/bin/env python # -*- coding: utf-8 -*- #Public domain '''Ithappens - show random quote''' # 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: # 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.tail if i.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 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()
chmod +x ithappens.py ./ithappens.py
Source: https://habr.com/ru/post/In149297/More articles:एआई - गोडेल बनाम ट्यूरिंग या कृत्रिम बुद्धि के आलोचक। देखने का तकनीकी बिंदुChrome बाज़ार में YouTube पी 2 पी एक्सटेंशन नस्ट हो गयावाई-फाई सिग्नल विश्लेषण आपको दीवार के दूसरी तरफ लोगों की निगरानी करने की अनुमति देता हैआधिकारिक तौर पर स्टीम सॉफ्टवेयर की बिक्री की घोषणा कीक्या तेजी से int को std :: string में c ++ में कनवर्ट करता है? अधिकतम गति के लिए संकलक सेटिंग्सWarcraft बनाना (भाग 1)WinApi पर प्रक्रियाओं (अनुप्रयोगों) का इंटरैक्शनरम्बलर अपग्रेडेड मेलसत्यापन के लाभों के बारे मेंगेमिंग मार्केट से भाप निकलती हैAll Articles