# Python program to get top 3 trendy news itemimporttweepyimportjsonfromdatetimeimportdate,timedelta,datetimefrompymongoimportMongoClientfromhtml.parserimportHTMLParserimportrefrompyshortenersimportShortenerNewsArrayIndex=0NewsArray=[None]*3classMyHTMLParser(HTMLParser):# This function collects the value# of href and stores in NewsArrayIndex# variabledefhandle_starttag(self,tag,attrs):# Only parse the 'anchor' tag.globalNewsArrayIndexiftag=="a":# Check the list of defined attributes.forname,valueinattrs:# If href is defined, print it.ifname=="href":# print(value + "\t" + News1)NewsArray[NewsArrayIndex]=value# print(NewsArray)NewsArrayIndex+=1# This function is the primary place# to tweet the collected daily news# News is retrieved from Coll_DailyNewsPlusReview# collection (MongoDB collection) This collection# holds the value of " News Headlines, Its review# count, news link" and based upon the review count,# top most # reviewed news are taken As twitter allows# only 280 characters, the retrieved news link got# shortened by using BITLY API Hashtags related to# the news are added underneath the retrieved top# 3 news (All together allowed characters are 280)# Then top 3 news gets tweeted from a credential# Finally per day basis the tweeted news are stored# into another collection for audit purposes as well# as for weekly postingdeftweetDailyNews():try:# This is the collection name in mongodbcursor_P=db1.Coll_DailyNewsPlusReview.find({"time":date_str})p0=cursor_P[0]News=p0.get('News')sortedNews=sorted(News,key=lambdax:int(x[1]),reverse=True)print(sortedNews[0][0]+"--"+sortedNews[0][1],sortedNews[1][0]+".."+sortedNews[1][1],sortedNews[2][0]+".."+sortedNews[2][1])hyperlink_format='<a href ="{link}">{text}</a>'parser=MyHTMLParser()dailyNews="Impactful News of the Day"+"\n"News0=sortedNews[0][2]parser.feed(hyperlink_format.format(link=News0,text=News0))News1=sortedNews[1][2]print("News1",News1)parser.feed(hyperlink_format.format(link=News1,text=News1))News2=sortedNews[2][2]print(News2)parser.feed(hyperlink_format.format(link=News2,text=News2))# News shortening patternBITLY_ACCESS_TOKEN="20dab258cc44c7d017bcd1c1f4b24484a37b8de9"b=Shortener(api_key=ACCESS_TOKEN)NewsArray[0]=re.sub('\n','',NewsArray[0])response1=b.bitly.short(NewsArray[0])response1=response1['url']NewsArray[1]=re.sub('\n','',NewsArray[1])response2=b.bitly.short(NewsArray[1])response2=response2['url']NewsArray[2]=re.sub('\n','',NewsArray[2])response3=b.bitly.short(NewsArray[2])response3=response3['url']news1FewWords=sortedNews[0][0].split()dailyNews+=news1FewWords[0]+" "+news1FewWords[1]+" "+news1FewWords[2]+"...."+response1+"\n"news2FewWords=sortedNews[1][0].split()dailyNews+=news2FewWords[0]+" "+news2FewWords[1]+" "+news2FewWords[2]+"...."+response2+"\n"news3FewWords=sortedNews[2][0].split()dailyNews+=news3FewWords[0]+" "+news3FewWords[1]+" "+news3FewWords[2]+"...."+response3+"\n"+"# bitcoin\ # cryptocurrency # blockchain # investor # altcoins\ # fintech # investment"print(dailyNews)status=api.update_status(status=dailyNews)ifstatus:foriinrange(3):datas={}datas['time']=str(date.today())datas['posted_as']=idatas['news']=sortedNews[i][0]datas['shortenedlink']=NewsArray[i]datas['reviewcount']=sortedNews[i][1]datas['link']=sortedNews[i][2]db1.Collection_tweeted_news.insert(datas)exceptExceptionase:print(e)print("Error in getting today news data",str(date_str))# Driver CodeNews1=' 'News2=' 'date_str=str(date.today())print("today",date_str)client=MongoClient('mongodb://localhost:27017/')# Connect your database heredb1=client.xxxx# credentials to tweetconsumer_key="xxxx"consumer_secret="xxxx"access_token="xxxx"access_token_secret="xxxx"# authentication of consumer key and secretauth=tweepy.OAuthHandler(consumer_key,consumer_secret)# authentication of access token and secretauth.set_access_token(access_token,access_token_secret)api=tweepy.API(auth,wait_on_rate_limit=True,wait_on_rate_limit_notify=True)tweetDailyNews()