| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586 |
- 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=[]
- def __init__(self,url,source,kw,lang="en"):
- url=sanitizeUrl(url)
- self.URL=url
- self.SOURCE=source
- a = Article(url, language=lang,keep_article_html=True)
- try:
- a.download()
- a.parse()
- return
- except Exception:
- print("ERROR parsing/downloading article")
- ERROR=True
- return
- a.nlp()
-
- 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.HTML=htmlmin.minify(a.article_html,remove_empty_space=True)
- for k in kw:
- if re.match(k["pattern"], self.TEXT):
- 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
- }
- 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()
|