Advertisement
Guest User

[Python Telegram Bot] All app

a guest
Mar 19th, 2021
334
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 6.53 KB | None | 0 0
  1. # import
  2. import feedparser
  3. import json
  4. from flask import request,Flask,render_template,request,jsonify,flash,redirect,url_for,abort
  5. import requests
  6. from urllib.parse import urlencode
  7. # from urllib.requests import url
  8. # from telegram import Update
  9. import telegram
  10. from telegram.ext import Updater, CommandHandler, MessageHandler, Filters, CallbackContext
  11. from flask_toastr import Toastr
  12. from urllib.parse import unquote
  13.  
  14. # Os system
  15. import os
  16. import threading
  17. from threading import Timer
  18. # import timer
  19. import sabyenc3
  20. import psycopg2
  21. import configparser
  22. import time
  23. from flask import Flask
  24. config = configparser.ConfigParser()
  25.  
  26. config.read('config.ini')
  27. # Logging 🟧
  28. # flask
  29. delay=30
  30. import logging
  31. logging.basicConfig(level=logging.DEBUG,
  32. format='%(asctime)s - %(name)s - %(levelname)s - %(message)s')
  33.  
  34.  
  35.  
  36. # database connection:hostpgsql ❗
  37. DB_HOST = config['DATABASE']['DB_HOST']
  38. DB_NAME = config['DATABASE']['DB_NAME']
  39. DB_USER = config['DATABASE']['DB_USER']
  40. DB_PASS = config['DATABASE']['DB_PASS']
  41. # BOT TELEGRAM🤖 + CHANNEL 📋
  42. BOT_TOKEN = config['BOT']['BOT_TOKEN']
  43. CHANNEL_ID = config['BOT']['CHANNEL_ID']
  44. # SQL connect 🏓:
  45. conn = psycopg2.connect(host=DB_HOST,database=DB_NAME, user=DB_USER, password=DB_PASS)
  46. cur = conn.cursor()
  47. PORT = "8443"
  48. BOT_CHAT="544523469"
  49. # URL_HEROKU="https://heroku-vietnamese-rss-reader.herokuapp.com/"
  50. print("Kết nối thành công")
  51. # ======================== BOt Token =======================
  52. updater = Updater(token=BOT_TOKEN, use_context=True)
  53.  
  54. job_queue = updater.job_queue
  55. dp = updater.dispatcher
  56. PORT = int(os.environ.get('PORT', '8443'))
  57. HEROKU_APP_NAME = "heroku-vietnamese-rss-reader."
  58. app = Flask(__name__)
  59. # =============================================
  60. # telegram bot
  61. APP_NAME ="heroku-vietnamese-rss-reader"
  62. def bot_reponse(message):
  63. # bot reponse
  64. params = {
  65. "chat_id": BOT_CHAT,
  66. "text": message,
  67. }
  68. requests.get("https://api.telegram.org/bot{}/sendMessage".format(BOT_TOKEN),params=params)
  69. # channel broadcast for channel
  70. def broadcast(message):
  71. requests.get(f'https://api.telegram.org/bot{BOT_TOKEN}/sendMessage?chat_id={CHANNEL_ID}&text={message}')
  72.  
  73.  
  74.  
  75. NAME="heroku-vietnamese-rss-reader"
  76. # toastr
  77. toastr = Toastr(app)
  78. # toastr:
  79. app.config['SECRET_KEY'] = '12345'
  80. # thêm feed_article
  81. def sqlInsertArticle(article_title,article_url,article_published_date):
  82. cur.execute("INSERT INTO feed_article (article_title,article_url,article_published_date) VALUES('%s','%s','%s')")
  83. conn.commit()
  84. print("🤖: Lưu vào Database và tôi sẽ phát sóng")
  85. # check article bởi url
  86. def sqlcheckArticle(article_url):
  87. cur.execute("SELECT article_url FROM feed_article WHERE article_url= '{}'".format(article_url))
  88. conn.commit()
  89. if not cur.fetchall():
  90. return True
  91.  
  92.  
  93. # thêm feed source
  94. @app.route('/addSource',methods=['POST'])
  95. def signUp():
  96. # NẾU có nguồn sẵn thì bỏ qua. Không thì add
  97. _sourceQuery = request.form['inputSource']
  98. query = urlencode({'q':_sourceQuery})
  99. print("Query:",query)
  100. _country_code = request.form.get('country')
  101. print("Nước bạn chọn:",_country_code)
  102. _lang = request.form.get('languages')
  103. # get time
  104. feed_duration = request.form.get('time')
  105. # feed_duration_parse = urlencode({'when':feed_duration})
  106. url = "https://news.google.com/rss/search?" + query + "+when:{}".format(feed_duration)+"&hl={}".format(_lang)+"&gl={}".format(_country_code)+"&ceid={}".format(_country_code)+":{}".format(_lang)
  107. print(url)
  108. # insert value check database
  109. cur.execute("INSERT INTO feed_source (feed_query,feed_country,feed_lang,feed_url,feed_duration) VALUES('{}','{}','{}','{}','{}')".format(_sourceQuery,_country_code,_lang,url,feed_duration))
  110. conn.commit()
  111. flash("ok")
  112. # url_str = (url+_country_code +_lang)
  113. # trả về url cho bot
  114. bot_reponse(url)
  115. return "OK!"
  116.  
  117. # Core
  118. # start the bot in a thread instead
  119.  
  120. # @app.route('/list')
  121. # list
  122. # load RSS and fetch it 📰
  123. # but first, check news availablity
  124. feeds = [] #feed cointainter
  125.  
  126. def fetchRSS():
  127. # feed url:
  128. # print("Feed url trong 5s")
  129. cur.execute("SELECT feed_url FROM feed_source")
  130. rows = cur.fetchall()
  131. for row in rows:
  132. row_result = ("".join(row))
  133. feeds.append(row_result)
  134. for url in feeds:
  135. print("URL để feed:",url)
  136. article = feedparser.parse(url)
  137. for article_news in article.entries:
  138. # get titles
  139. article_title = article_news.title
  140. article_url = article_news.link
  141. article_published_date = article_news.published
  142. # insert vào bảng feed_article từ sql
  143. if sqlcheckArticle(article_url):
  144. sqlInsertArticle(article_title,article_url,article_published_date)
  145. # Phát sóng URL:
  146.  
  147. message = article_title + "\n" + article_url
  148. broadcast(message)
  149. time.sleep(1)
  150. else:
  151. print("🤖:Bài viết đã có !")
  152.  
  153. def start_handler(update,context):
  154. update.message.reply_text("Hello from Python!\nPress /random to get random number")
  155.  
  156. def set_interval(func, sec):
  157. def func_wrapper():
  158. set_interval(func, sec)
  159. func()
  160. t = threading.Timer(sec, func_wrapper)
  161. t.start()
  162. return t
  163. # get webhook json reponse
  164. @app.route('/' + BOT_TOKEN, methods=['POST'])
  165. def webhook_handler():
  166. if request.method == 'POST':
  167. update = telegram.Update.de_json(request.get_json(force=True), updater)
  168. print("update",update)
  169. chat_id = update.message.chat.id
  170. msg_id = update.message.message_id
  171. text = update.message.text.encode('utf-8').decode()
  172. # # for debugging purposes only
  173. print("got text message :", text)
  174.  
  175. else:
  176. print(request.json)
  177. abort(400)
  178. return 'ok'
  179.  
  180. @app.route('/setwebhook', methods=['GET', 'POST'])
  181. def set_webhook():
  182.  
  183. s = updater.bot.set_webhook('https://heroku-vietnamese-rss-reader.herokuapp.com/' + BOT_TOKEN)
  184. if s:
  185. return "webhook setup ok"
  186. else:
  187. return "webhook setup failed"
  188. # @app.route('/web_hook')
  189. # bot command
  190.  
  191. @app.route('/')
  192.  
  193. def main():
  194.  
  195. dp.add_handler(CommandHandler("start", start_handler))
  196. cur.execute("SELECT * FROM feed_source")
  197. data = cur.fetchall()
  198. return render_template('index.html',data=data)
  199. if __name__ == '__main__':
  200. app.run()
  201.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement