Очередной раз нажав Ctrl-C в адресной строке браузера я вспомнил о существовании одной полезной программки на моем компьютере. Не уверен что в чистом виде она кому-нибудь понадобится, но ее идеи могут стать основой для ваших программ.
Я использую RSS для получения новых публикаций с Хабра. Большинство из них я даже не открываю - не мой круг интересов, но некоторые все таки привлекают внимание и я нажимаю на линк. Если статья короткая - я могу сразу ее прочитать, но если статья длинная или содержит много кода, в котором нужно вдумчиво разбираться - логично отложить ее прочтение на будущее, добавив в закладки. Все было бы хорошо, если бы не одно но... Статьи, особенно в хабе "Из песочницы" имеют свойство часто исчезать, еще до того как я нашел время на их прочтение.
Можно сохранять статьи в виде MHT, но забросить ее на телефон/планшет/букридер и прочитать на рыбалке уже не получится. Можно воспользоваться wkhtmltopdf, но это куча лишних телодвижений, которые лень совершать изо дня в день. Так родилась идея сделать программку, которая:
Я использую RSS для получения новых публикаций с Хабра. Большинство из них я даже не открываю - не мой круг интересов, но некоторые все таки привлекают внимание и я нажимаю на линк. Если статья короткая - я могу сразу ее прочитать, но если статья длинная или содержит много кода, в котором нужно вдумчиво разбираться - логично отложить ее прочтение на будущее, добавив в закладки. Все было бы хорошо, если бы не одно но... Статьи, особенно в хабе "Из песочницы" имеют свойство часто исчезать, еще до того как я нашел время на их прочтение.
Можно сохранять статьи в виде MHT, но забросить ее на телефон/планшет/букридер и прочитать на рыбалке уже не получится. Можно воспользоваться wkhtmltopdf, но это куча лишних телодвижений, которые лень совершать изо дня в день. Так родилась идея сделать программку, которая:
- Постоянно болтается в памяти и для превращения поста в pdf не требует никаких лишних телодвижений
- Убирает все лишнее со страницы, чтобы остался только интересный контент
- Легко могла быть модифицирована в случае изменения разметки страниц на сайте
Итак встречайте: habr2pdf
#!/usr/bin/python import sys import re import os from PyQt4 import QtCore, QtGui, QtNetwork, QtWebKit outputpath="/home/ievgen/DocumentToIndex" class httpWidget(QtGui.QWidget): def __init__(self, parent=None): super(httpWidget, self).__init__(parent) self.clipboard = QtGui.QApplication.clipboard() QtCore.QObject.connect(self.clipboard,QtCore.SIGNAL("dataChanged()"), self.clipboardchanged) self.webview = QtWebKit.QWebView() QtCore.QObject.connect(self.webview,QtCore.SIGNAL("loadFinished(bool)"), self.gotpage) def clipboardchanged(self): mimedata = self.clipboard.mimeData() if mimedata.hasUrls(): self.url=self.clipboard.text() if re.search("^http://habrahabr.ru/post/",self.url): self.webview.setUrl(QtCore.QUrl(self.url)) def gotpage(self,ready): self.webview.page().mainFrame().evaluateJavaScript("name='"+unicode(self.url)+"""'; header = document.createElement("div"); header.textContent=name; empty = document.createElement("div"); toremove=document.getElementById('header') toremove.parentNode.replaceChild(empty,toremove); toremove=document.getElementsByClassName('sidebar_right')[0]; toremove.parentNode.replaceChild(empty,toremove); toremove=document.getElementById('comments') toremove.parentNode.replaceChild(empty,toremove); toremove=document.getElementById('footer'); toremove.parentNode.replaceChild(empty,toremove); toremove=document.getElementById('topline'); toremove.parentNode.replaceChild(header,toremove); div=document.getElementsByClassName("content_left")[0]; div.style.width="95%"; """); outputName = re.search("^http://habrahabr.ru/post/(.*?)/$",unicode(self.url)) contentsSize = self.webview.page().mainFrame().contentsSize(); self.webview.page().setViewportSize ( contentsSize ) self.printer = QtGui.QPrinter ( QtGui.QPrinter.ScreenResolution ) self.printer.setOutputFormat ( QtGui.QPrinter.PdfFormat ) self.printer.setPaperSize ( QtGui.QPrinter.A4 ) self.printer.setOrientation ( QtGui.QPrinter.Portrait ) self.printer.setOutputFileName ( outputpath + "/" + outputName.group(1)+".pdf" ) self.printer.setPageMargins(10, 15, 10, 15, QtGui.QPrinter.Millimeter) self.webview.page().mainFrame().print_ ( self.printer ) class SystemTrayIcon(QtGui.QSystemTrayIcon): def __init__(self, icon, parent=None): QtGui.QSystemTrayIcon.__init__(self, icon, parent) self.parent = parent self.menu = QtGui.QMenu(parent) exitAction = self.menu.addAction("Exit") self.setContextMenu(self.menu) self.connect(exitAction, QtCore.SIGNAL('triggered()'), self.quit) def quit(self): del self.parent QtGui.qApp.quit() if __name__ == "__main__": pid = os.fork() if pid > 0: sys.exit(0) app = QtGui.QApplication(sys.argv) myapp = httpWidget() style = app.style() icon = QtGui.QIcon(style.standardPixmap(QtGui.QStyle.SP_FileIcon)) trayIcon = SystemTrayIcon(icon,myapp) trayIcon.show() sys.exit(app.exec_())
Комментариев нет:
Отправить комментарий