iT邦幫忙

1

利用matplotlib畫的圖片,如何使用linebot的方式傳送

在網絡上有查到利用linebot傳送圖片只能用圖片的網址,但是我要如何用Python直接將畫出的圖形上傳到imgur來獲取網址?

圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

1 個回答

1
dragonH
iT邦超人 5 級 ‧ 2019-06-06 00:37:45
最佳解答

阿你都講完步驟了阿

1.畫完存圖, 看你要直接存成圖片 之後再抓出來上傳, 或是有辦法存成 binary

2.用 imgur api 把圖片上傳, 成功會回傳圖片url

3.把圖片 url 丟到你的 linebot post 出去

看更多先前的回應...收起先前的回應...
scott_l iT邦新手 5 級 ‧ 2019-06-06 08:01:35 檢舉

理論我都懂,但是重點是,我在linebot裡面呼叫畫圖的副程式時無法畫圖與存圖片,所以我在想是因為圖檔存不了還是怎麼回事,是要轉成binary?

dragonH iT邦超人 5 級 ‧ 2019-06-06 09:10:43 檢舉

無法畫圖與存圖片是指會有錯誤嗎

如果這樣 把這副程式抽出來

測試到底是這副程式存圖有問題

或是在linebot呼叫因為其他原因造成的

scott_l iT邦新手 5 級 ‧ 2019-06-06 09:24:31 檢舉

沒有錯誤,只是單純畫圖與存圖的副程式無法被執行到,但是兩個程式(line與畫圖的)分別執行都沒有錯誤。

#畫圖與存圖的
def glucose_graph(sid,ug):
plt.figure(figsize=(240,240))
plt.plot(ug)
plt.savefig(sid+'.png')
#呼叫部分
#sid is event.message.text
message = ImageSendMessage(original_content_url=image_url+sid+'.png',preview_image_url=image_url+sid+'.png')
line_bot_api.reply_message(event.reply_token, message)

dragonH iT邦超人 5 級 ‧ 2019-06-06 11:50:01 檢舉

沒看到你有呼叫 副程式阿

然後你不是要用 imgur api 上傳圖片嗎

怎麼直接往line bot 丟了

還是說

image_url 是你自己建的static file server

scott_l iT邦新手 5 級 ‧ 2019-06-06 15:22:57 檢舉

抱歉少了一段..
#畫圖與存圖的
def glucose_graph(sid,ug):
plt.figure(figsize=(240,240))
plt.plot(ug)
plt.savefig('send.png')
CLIENT_ID = "233a2069365e"
PATH = "send.png"
im = pyimgur.Imgur(CLIENT_ID)
uploaded_image = im.upload_image(PATH, title="Uploaded with PyImgur")
return uploaded_image.link
#呼叫部分
#sid is event.message.text
#eat is list
img_url = glucose_graph(sid, eat)
message = ImageSendMessage(original_content_url=img_url,preview_image_url=img_url)
line_bot_api.push_message(to, message)

dragonH iT邦超人 5 級 ‧ 2019-06-06 19:56:24 檢舉

google 註冊 imgur 搞了好久...

我實際測試

可以存圖片並且上傳imgur也拿到網址

畫圖是參考其他地方的

應該不影響

import numpy as np
import matplotlib.pyplot as plt
import pyimgur

def glucose_graph():
    """
    plt.figure(figsize=(240,240))
    plt.plot(ug)
    plt.savefig('send.png')
    """
    normal_samples = np.random.normal(size = 100000)
    uniform_samples = np.random.uniform(size = 100000)
    plt.hist(normal_samples)
    plt.savefig('send.png')
    CLIENT_ID = "************"
    PATH = "send.png"
    im = pyimgur.Imgur(CLIENT_ID)
    uploaded_image = im.upload_image(PATH, title="Uploaded with PyImgur")
    return uploaded_image.link
img_url = glucose_graph()
print(img_url)

return 的 img_url

https://imgur.com/9I8mwxy

另外確認一下

你的CLIENT_ID應該是故意拿掉幾個字的吧

因為我用會拿到invaild id 的訊息

如果不是的話...

scott_l iT邦新手 5 級 ‧ 2019-06-06 22:07:14 檢舉

感謝你的回覆,問題解決了

我要發表回答

立即登入回答