Автор Гілка: УНІАН - тягачка  (Прочитано 2345 раз)

Відсутній Сергій Лисовенко

  • Літератор
  • ******
  • дописів: 1489
  • Карма: +0/-0
УНІАН - тягачка
« : 2011-01-17 20:36:35 »
Почалося все з того, що в мене була купа роботи, але мені чомусь кортіло затягти RSS стрічку УНІАН на свою книжкочиталку. Накатав отакий на половину небоєздатний скрипт.
#!/usr/bin/python
# -*- coding: utf-8 -*-
# (c) me
from sys import argv,exit
def items(s,its='<item>',ite='</item>'):
 itsl=len(its)
 itel=len(ite)
 st=s.find(its)
 res=[]
 while st>=0:
  st+=itsl
  en=s.find(ite,st)
  res.append(s[st:en])
  st=s.find(its,en+itel)
 return res

def xmprint(s,htm=False):
 res='<section>'
 start=s.find("<H1>")
 end=s.find('</div>',start)
 for i in items(s[start:end],'<H1>','</H1>'):
  if htm:
   res+='<h1>'+i+'</h1>'
  else:
   res+='<title><p>'+i+'</p></title>\n'
 st=s.find("<P>",start)
 while st<end and st >0:
  np=s.find("</P>",st+3)
  np1=s.find("<P>",st+3)
  if np>np1 and np1>0: np=np1
  string=s[st+3:np]
  res+='<p>'+string+'</p>\n'
  st=s.find("<P>",np)
# for i in items(s,'<P>','</P>'):
#  res+='<p>'+i+'</p>\n'
 return res+'</section>'


IfHTML='-htm' in argv

import urllib2
resp=urllib2.urlopen('http://rss.unian.net/site/news_ukr.rss')
txt=resp.read()
lnks=[]
for i in items(txt):
 lnk=i[i.find('<link>')+6:i.find('</link>')]
 lnks.append(lnk)
strh="""<?xml version="1.0" encoding="windows-1251"?>
<FictionBook xmlns="http://www.gribuser.ru/xml/fictionbook/2.0" xmlns:l="http://www.w3.org/1999/xlink">
<description>
<title-info>
<genre>comp_www</genre>
<author><first-name>UNIAN 2 fb2</first-name></author>
<book-title>UNIAN Info</book-title>
<lang>uk</lang>
</title-info>
<document-info>
<author><first-name>UNIAN 2 fb2</first-name></author>
<date>%date%</date>
<id>%id%</id>
<version>0.1</version>
</document-info>
</description>
<body>
"""
stre='</body></FictionBook>'
#print strh+xmt.replace("&nbsp;"," ")+stre
if IfHTML:
 ouf=open("UNIAN.htm","w")
 ouf.write("<html><head><title>UNIAN</title></head><body>\n")
else:
 ouf=open("UNIAN.fb2","w")
 ouf.write(strh)
for i in xrange(len(lnks)):
 print "(%d/%d) %s"%(i+1,len(lnks),lnks[i])
 htext=urllib2.urlopen(lnks[i])
 xmt= xmprint(htext.read(),IfHTML)
 ouf.write(xmt.replace("&nbsp;"," "))
if IfHTML:
 ouf.write('</body></html>')
else:
 ouf.write(stre)
ouf.close()
Спочатку планувалось, що сіє диво видасть результуючий fb2 дива не сталось: результуючий файл не проходив валідацію. Замість того, щоб вивчати бібліотеку парсіння HTML (ох і плутають теги ті УНІАНівські писаки: "<p><em>bla - bla <p></em>...").
Зрештою, книжкочиталка сама HTML тямить читати - скористався цією фічею і присобачив скрипту опцію "-htm" - з нею працює безвідмовно  ;)
Якщо хтось є щасливим власником читалки, яка не тямить HTML (але розуміє fb2) та ще хоче читати з неї стрічку новин від УНІАН - пропоную присобачити код для парсіння HTML - тегів і вивішати тут :)
« Змінено: 2011-01-17 22:18:28 від serg_ik »
Якщо Лінукс написали студенти - нехай вони під ним і навчаються.