當初做scraparazzie這個套件的目的,是希望可以抓自己有興趣的topic和keywords的新聞傳送到某個IM的bot,就能根據之後自己再設定隨時看到新聞,方便自己炒股和追蹤農業災害新聞(啊…因為想要炒commodity嘛🤫)。但我並不需要內文,只需要標題、新聞來源和發布時間就好,有興趣再click連結去看。偶然看到LINE Notify的教學,就拿來實作一下吧。

開發環境:Python 3.7

另外也需要LINE Notify的權杖,因此會需要有LINE帳號。接下來先step-by-step介紹申請LINE Notify權杖的部分。

STEP 1:

  • 點選【發行權杖】(Generate token)

  • 輸入自訂「權杖名稱」, 這邊設定的名稱會在出現在提醒訊息的Title
  • 選擇第一個【透過1對1聊天接受LINE Notify的通知】(1-on-1 chat with LINE Notify) ,然後按下「發行」(Generate token)

按下「發行」後,就會顯示權杖。請將權杖內容「複製」並記下來!程式與LINE Notify溝通就是靠這個權杖!

LINE Notify設定的部分大概到這裡結束。

STEP 2:

  • 建立 lineNotifyMessage.py 檔案
  • 在token部分,記得將剛剛在LINE Notify記下的權杖貼上去
from scraparazzie import scraparazzie
import requests
import time
from random import randrange

# LINE Notify的部分|LINE Notify setting

token = "paste_your_token_here"    # 從LINE Notify獲得的權杖|Token from LINE Notify
def lineNotifyMessage(token, msg):    # LINE Notify傳訊息的設定|Message sending setting of LINE Notify
    headers = {
        "Authorization": "Bearer " + token, 
        "Content-Type" : "application/x-www-form-urlencoded"
    }

    payload = {'message': msg}
    r = requests.post("https://notify-api.line.me/api/notify", headers = headers, params = payload)
    return r.status_code

# 設定你想發的訊息或東西的部分|Setting the items or message you want to send
keywords = ["locust infest plague", "Chinese medicine"]
locations = ["Canada"]
chooen_language = ["English"]

def searching_topic(locations, keywords, languages):
    for location in locations:
        location = "{}".format(location)
        for topic in keywords:
            items = "{}".format(topic)
            for language in languages:
                language = "{}".format(language)
                print("Items in progress: " + location + " - " + topic + " - " + language)
                client = scraparazzie.NewsClient(language = language, location = location, query = items, max_results = 1) # 利用scraparazie尋找詢問的關鍵字|Searching the keywords through scraparazzie
                client.print_news()
                output = client.export_news() # 輸出結果|Output searching result
                for export_items in output:
                    message = "\n" + "處理關鍵字|Processing keywords: " + items + "\n" + "標題|Title: " + export_items['title'] + "\n" + "新聞來源|Source: " + export_items['source'] + "\n" + "連結|Link: " + export_items['link'] + "\n" + "發布時間|Publish date: " + export_items['publish_date']
                    lineNotifyMessage(token, message) # 運行lineNotifyMessage()|Run lineNotifyMessage()
                sleep_time = randrange (1, 10)
                time.sleep(sleep_time)

searching_topic(locations, keywords, chooen_language)

由於想要用多個關鍵字找新聞,因此就直接寫個def和迴圈跑。location當然也可以設多個。若要找不同語言,強烈建議分開跑新聞,不然很容易會出現找不到結果的狀況。同時也不建議找太多篇新聞,因此max_result別設太大。其他設定可以去scraparazzie的github看看。

STEP 3:

  • 測試執行如下:
python lineNotifyMessage.py
  • 然後就能收到在LINE Notify傳送來的新聞

這個程式只是跑新聞出來而已。若想要變成定時,或者放在雲端跑的話,可以尋找相關的文章設定。

除了LINE Notify,也可以做成Slack bot,定時發新聞去workspace裡面。唔…想起以前曾經短暫時間在某機關工作,早上看到一堆人埋首在一疊報紙看報導剪報🤭,有這樣的程式還真方便多了😬