2017年12月18日 星期一

透過 Python 發 Line Notify 三部曲 - 發圖圖圖片


要發圖片!
首先最重要的一件事!   是你必須有一張圖片!

先用 curl 下載一張圖片 (請原諒我幻想症又發作了命名為 girlfriend.jpg)
底下環境是在手機上的 Termux 執行,可參考第二篇
curl http://entdata-pic.stor.sinaapp.com/2014121008/548798f25462b01.jpg > girlfriend.jpg


接著,先透過 curl 試發 (Bearer 後面的 2Dxxx7V 的,記得換成你自己的 token)
curl -X POST https://notify-api.line.me/api/notify \
     -H 'Authorization: Bearer 2D111111111111111111111111117V' \
     -F 'message=test' -F 'imageFile=@/data/data/com.termux/files/home/girlfriend.jpg'


帥氣的按下 enter 後,這時你應該會看到你帥氣的 Line 彈跳出美麗的女友照片



/data/data/com.termux/files/home/ 真的是我 Termux 的家目錄
一般人應該是在 /home 而已,注意路徑前面要加個 @


好,不廢話,因為現在超累超想睡,明天還要上班,我要 GG 了…
Python 程式碼如下:

import requests, os

"""
發送 Line Notify 訊息
"""
def lineNotify(token, msg, picURI):
    url = "https://notify-api.line.me/api/notify"
    headers = {
        "Authorization": "Bearer " + token
    }
   
    payload = {'message': msg}
    files = {'imageFile': open(picURI, 'rb')}
    r = requests.post(url, headers = headers, params = payload, files = files)
    return r.status_code


token = os.environ["LINE_TEST_TOKEN"]
msg = "Hello Python"
picURI = "/data/data/com.termux/files/home/girlfriend.jpg"


lineNotify(token, msg, picURI)



好啦,其實我是參考這篇來著的

如果你有卡關,可以先參考看看
第一篇,透過 Python 發 Line Notify
第二篇,透過 Python 發 Line Notify 二部曲 - 發表情符號

補充,突然想到,其實你的 D 槽裡面不用有一堆圖片也沒關係
也可以直接發網路上 http:// 上的圖片的樣子,但這個需求應該比較少
因為還要上傳到網路上,再指定該網址,就不再試了

透過 Python 發 Line Notify 二部曲 - 發表情符號


自從用了 Termux,覺得這真的是他媽的好物!!
簡單講,它就是讓你沒啥屁用的手機搖身一變成一台強大的 Linux 主機! (絕對可以跑 python)

之前看到人家說 pythonAnywhere 是利器!  結果花了時間嘗試後,發現連 requests.get 都不行,一定得花錢才能有些作用,這根本是在浪費我寶貴的人生嘛…    雖然說免費的最貴,但我就是不想花錢!

除了我的 0050深似海Line群組 目前的自動通知 notify 程式是跑在上面以外,這次試 Line 發圖片也是先在上面跑 crul 到 line 的網址作測試

比如這次先用  curl 發 Line Notify 表情符號,透過 putty 連入手機

(Bearer 後面的 2Dxxx7V 的,記得換成你自己的 token)
curl -X POST https://notify-api.line.me/api/notify \
     -H 'Authorization: Bearer 2D111111111111111111111R7V' \
     -F 'message=test' -F 'stickerPackageId=1' -F 'stickerId=114'

如圖:

用了 Termux 後,我不只長高了,考試都考一百分了!
不再需要開 vmware 或 virtualbox 耗掉自己電腦的效能!
你的手機就是一台強大的 Linux 主機了!


恩,廢話又講太多了,用 python 透過 Line Notify 傳表情符號
import requests, os

"""
發送 Line Notify 訊息 + 表情符號
"""
def lineNotify(token, msg, stickerPackageId, stickerId):
    url = "https://notify-api.line.me/api/notify"
    headers = {
        "Authorization": "Bearer " + token
    }
   
    payload = {"message": msg, "stickerPackageId": stickerPackageId, 'stickerId': stickerId}
    r = requests.post(url, headers = headers, params = payload)
    return r.status_code


token = os.environ["LINE_TEST_TOKEN"]
msg = "Hello Python"
stickerPackageId = 2
stickerId = 38

lineNotify(token, msg, stickerPackageId, stickerId)



最後,參考資料,表情符號對照 ID 可參考此文件:
https://devdocs.line.me/files/sticker_list.pdf


如果你只是要單純傳訊息,可參考之前的第一篇
如果你要發圖片,請參考第三篇…

透過 Python 發 Line Notify 三部曲 - 發圖圖圖片


2017年12月17日 星期日

透過 Python 發 Line Notify


透過 Line Notify 機制發 Line 訊息提醒自己其實超簡單
網路上很多教學要設定一拖拉庫,有點沒必要
最難的大概就在設定 token 而已吧,但也其實就是下面這樣而已

請留意,務必使用電腦版申請,因為用手機版似乎會拉不到最下面


到設定網址  https://notify-bot.line.me/zh_TW/  進行登入


登入後在右上角自己的名字下拉選單點選「個人頁面」


進行後往下拉,會看到如圖,按下「發行權杖」


接著就是出現一堆你自己的群組讓你選,第一次你應該選那個很厲害的
「透過1對1聊天接受LINE Notify的通知」,開發時用來進行測試
測完再再開始胡亂發到各個群組去~



填完一個帥氣的 智障名稱 權杖名稱後,按下發行,
這時你應該已經得到那該死的權杖了 (後續在程式裡我叫它 token)
他長的像底下這樣,要記下來,後續好像沒辦法查

1e23xIfEx53QJUuewWpkldrxdf23clIW1x0VaxdfDCew7V


若找不到發行,應是解析度問題,請按 ctrl + 滑鼠下滾,應該就可以看到發行按鈕




得到權杖後,python 發 line 對你應該沒難度了

執行
pip install lineTool


'''
測試 Line Notify
Created on 2017年12月11日
@author: rocky.wang
'''
import os
import lineTool

# token 改成你自己的,底下的案例是設到環境變數
token = os.environ["LINE_TEST_TOKEN"]
# 這是放明碼,不建議,以免不小心就 push 到 github 上了
token = "1e23xIfEx53QJUuewWpkldrxdf23clIW1x0VaxdfDCew7V"
msg = "Notify from Python \nHave a nice day"

lineTool.lineNotify(token, msg)


如果你有潔屁,不想安裝奇奇怪怪的 lineTool
原始碼其實只有這樣,就自己寫囉
剛沒注意到把自己真實的 token 給放上去了,所以還是建議放環境變數以免不小心就把自己的 token 給 push 到 github 了,就冏了

import requests

"""
發送 Line Notify 訊息
"""
def lineNotify(token, msg):

    url = "https://notify-api.line.me/api/notify"
    headers = {
        "Authorization": "Bearer " + token, 
        "Content-Type" : "application/x-www-form-urlencoded"
    }
    
    payload = {'message': msg}
    r = requests.post(url, headers = headers, params = payload)
    return r.status_code


續集

透過 Python 發 Line Notify 二部曲 - 發表情符號