| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394 |
- import re
- import htmlmin
- import datetime
- from functions import sanitizeUrl
- from newspaper import Article
- class News():
- r=re.compile(r"hours? ago|yesterday|today|last week|month",flags=re.IGNORECASE)
- r_noise=re.compile(r"posted|Product|Google",flags=re.IGNORECASE)
-
- URL=""
- AUTHORS=[]
- SCRAP_DATE=None
- PUBLISH_DATE=None
- SUMMARY=""
- TEXT=""
- HTML=""
- ERROR=False
- SOURCE=""
- WEIGHT_SUM=0
- MATCHES=False
- MATCHING_KW=[]
- TITLE=""
- def __init__(self,url,source,kw,lang="en"):
- url=sanitizeUrl(url)
- self.URL=url
- self.SOURCE=source
- self.MATCHING_KW=[]
- a = Article(url, language=lang,keep_article_html=True,request_timeout=10)
- try:
- a.download()
- a.parse()
- a.nlp()
- except Exception as e:
- print("ERROR parsing/downloading/nlp article")
- print(e)
- self.ERROR=True
- self.MATCHES=False
- return
- a.authors=self.dedup([self.fix_author(value) for value in a.authors if not self.isComment(value) and not self.isNoise(value)])
-
- self.SCRAP_DATE=datetime.datetime.now()
- self.AUTHORS=a.authors
- self.PUBLISH_DATE=a.publish_date
- self.SUMMARY=a.summary
- self.TEXT=a.text
- self.TITLE=a.title
- self.HTML=htmlmin.minify(a.article_html,remove_empty_space=True)
- self.ERROR=False
- lowertext=self.TEXT.lower()
- for k in kw:
- #if re.match(k["pattern"], self.TEXT): #FIXME regex vs string in string
- matches=len( [ 1 for kwp in k["pattern"] if kwp in lowertext ] )
- if matches==len(k["pattern"]):
- self.WEIGHT_SUM+=k["weight"]
- self.MATCHING_KW.append(k["kw"])
- self.MATCHES=True
- def get(self):
- return {
- "url": self.URL,
- "source": self.SOURCE,
- "authors": self.AUTHORS,
- "scrap_date": self.SCRAP_DATE,
- "publish_date": self.PUBLISH_DATE,
- "summary": self.SUMMARY,
- "text": self.TEXT,
- "matches": self.MATCHES,
- "weight": self.WEIGHT_SUM,
- "kw": self.MATCHING_KW,
- "html": self.HTML,
- "error": self.ERROR,
- "title": self.TITLE
- }
- def dedup(self,val):
- return list(set(val))
- def isNoise(self,v):
- if self.r_noise.match(v):
- return True
- return False
- def isComment(self,v):
- if self.r.match(v):
- return True
- return False
-
- def fix_author(self,a):
- return a.replace("_", " ").lower()
|