Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- # import
- import feedparser
- import json
- from flask import request,Flask,render_template,request,jsonify,flash,redirect,url_for,abort
- import requests
- from urllib.parse import urlencode
- # from urllib.requests import url
- # from telegram import Update
- import telegram
- from telegram.ext import Updater, CommandHandler, MessageHandler, Filters, CallbackContext
- from flask_toastr import Toastr
- from urllib.parse import unquote
- # Os system
- import os
- import threading
- from threading import Timer
- # import timer
- import sabyenc3
- import psycopg2
- import configparser
- import time
- from flask import Flask
- config = configparser.ConfigParser()
- config.read('config.ini')
- # Logging 🟧
- # flask
- delay=30
- import logging
- logging.basicConfig(level=logging.DEBUG,
- format='%(asctime)s - %(name)s - %(levelname)s - %(message)s')
- # database connection:hostpgsql ❗
- DB_HOST = config['DATABASE']['DB_HOST']
- DB_NAME = config['DATABASE']['DB_NAME']
- DB_USER = config['DATABASE']['DB_USER']
- DB_PASS = config['DATABASE']['DB_PASS']
- # BOT TELEGRAM🤖 + CHANNEL 📋
- BOT_TOKEN = config['BOT']['BOT_TOKEN']
- CHANNEL_ID = config['BOT']['CHANNEL_ID']
- # SQL connect 🏓:
- conn = psycopg2.connect(host=DB_HOST,database=DB_NAME, user=DB_USER, password=DB_PASS)
- cur = conn.cursor()
- PORT = "8443"
- BOT_CHAT="544523469"
- # URL_HEROKU="https://heroku-vietnamese-rss-reader.herokuapp.com/"
- print("Kết nối thành công")
- # ======================== BOt Token =======================
- updater = Updater(token=BOT_TOKEN, use_context=True)
- job_queue = updater.job_queue
- dp = updater.dispatcher
- PORT = int(os.environ.get('PORT', '8443'))
- HEROKU_APP_NAME = "heroku-vietnamese-rss-reader."
- app = Flask(__name__)
- # =============================================
- # telegram bot
- APP_NAME ="heroku-vietnamese-rss-reader"
- def bot_reponse(message):
- # bot reponse
- params = {
- "chat_id": BOT_CHAT,
- "text": message,
- }
- requests.get("https://api.telegram.org/bot{}/sendMessage".format(BOT_TOKEN),params=params)
- # channel broadcast for channel
- def broadcast(message):
- requests.get(f'https://api.telegram.org/bot{BOT_TOKEN}/sendMessage?chat_id={CHANNEL_ID}&text={message}')
- NAME="heroku-vietnamese-rss-reader"
- # toastr
- toastr = Toastr(app)
- # toastr:
- app.config['SECRET_KEY'] = '12345'
- # thêm feed_article
- def sqlInsertArticle(article_title,article_url,article_published_date):
- cur.execute("INSERT INTO feed_article (article_title,article_url,article_published_date) VALUES('%s','%s','%s')")
- conn.commit()
- print("🤖: Lưu vào Database và tôi sẽ phát sóng")
- # check article bởi url
- def sqlcheckArticle(article_url):
- cur.execute("SELECT article_url FROM feed_article WHERE article_url= '{}'".format(article_url))
- conn.commit()
- if not cur.fetchall():
- return True
- # thêm feed source
- @app.route('/addSource',methods=['POST'])
- def signUp():
- # NẾU có nguồn sẵn thì bỏ qua. Không thì add
- _sourceQuery = request.form['inputSource']
- query = urlencode({'q':_sourceQuery})
- print("Query:",query)
- _country_code = request.form.get('country')
- print("Nước bạn chọn:",_country_code)
- _lang = request.form.get('languages')
- # get time
- feed_duration = request.form.get('time')
- # feed_duration_parse = urlencode({'when':feed_duration})
- 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)
- print(url)
- # insert value check database
- 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))
- conn.commit()
- flash("ok")
- # url_str = (url+_country_code +_lang)
- # trả về url cho bot
- bot_reponse(url)
- return "OK!"
- # Core
- # start the bot in a thread instead
- # @app.route('/list')
- # list
- # load RSS and fetch it 📰
- # but first, check news availablity
- feeds = [] #feed cointainter
- def fetchRSS():
- # feed url:
- # print("Feed url trong 5s")
- cur.execute("SELECT feed_url FROM feed_source")
- rows = cur.fetchall()
- for row in rows:
- row_result = ("".join(row))
- feeds.append(row_result)
- for url in feeds:
- print("URL để feed:",url)
- article = feedparser.parse(url)
- for article_news in article.entries:
- # get titles
- article_title = article_news.title
- article_url = article_news.link
- article_published_date = article_news.published
- # insert vào bảng feed_article từ sql
- if sqlcheckArticle(article_url):
- sqlInsertArticle(article_title,article_url,article_published_date)
- # Phát sóng URL:
- message = article_title + "\n" + article_url
- broadcast(message)
- time.sleep(1)
- else:
- print("🤖:Bài viết đã có !")
- def start_handler(update,context):
- update.message.reply_text("Hello from Python!\nPress /random to get random number")
- def set_interval(func, sec):
- def func_wrapper():
- set_interval(func, sec)
- func()
- t = threading.Timer(sec, func_wrapper)
- t.start()
- return t
- # get webhook json reponse
- @app.route('/' + BOT_TOKEN, methods=['POST'])
- def webhook_handler():
- if request.method == 'POST':
- update = telegram.Update.de_json(request.get_json(force=True), updater)
- print("update",update)
- chat_id = update.message.chat.id
- msg_id = update.message.message_id
- text = update.message.text.encode('utf-8').decode()
- # # for debugging purposes only
- print("got text message :", text)
- else:
- print(request.json)
- abort(400)
- return 'ok'
- @app.route('/setwebhook', methods=['GET', 'POST'])
- def set_webhook():
- s = updater.bot.set_webhook('https://heroku-vietnamese-rss-reader.herokuapp.com/' + BOT_TOKEN)
- if s:
- return "webhook setup ok"
- else:
- return "webhook setup failed"
- # @app.route('/web_hook')
- # bot command
- @app.route('/')
- def main():
- dp.add_handler(CommandHandler("start", start_handler))
- cur.execute("SELECT * FROM feed_source")
- data = cur.fetchall()
- return render_template('index.html',data=data)
- if __name__ == '__main__':
- app.run()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement