Telegram Bot 學習筆記 – 5:取得使用者大頭照

/

Telegram Bot 的大頭照要另外取得

Telegram Bot 跟 LINE Bot有一個不同,LINE Bot 取得的使用者基本資料就有大頭照,而 Telegram Bot 卻沒有,要取得的話要另外調用 API 取,而且圖片檔案一次只會存活 1 小時,不愧是保密性高的通訊 App。

要拿使用者大頭照,無法單純的只調用一個 API 就取得,實做的結果是調用了 3 個 API 才成功。


取得使用者大頭照的流程

要取得使用者大頭照,需要 3 個參數:

  • user_id
  • file_id
  • file_path

user_id 才能取得 file_id,有 file_id 才能取得 file_path,有了 file_path,就可以拿到大頭照的圖檔路徑。

以下開始寫的部份,會需要一些 Telegram Bot API 的基本使用,可先參考以下 2 篇:

用 GCP + Node.js 接收 / 推播訊息

用 Google Apps Script 接收 / 推播訊息


user_id

user_id 在前幾篇筆記文都有寫到,收到使用者傳的訊息時,機器人紀錄的 JSON 就有 user_id 了,訊息的 JSON 如下:

收到訊息時的json
收到訊息時的 JSON

JSON 中的 from.id 就是 user_id

這是廣告,點擊一下可以幫本站多個一點點的廣告收入,謝謝


file_id

有了 user_id,POST 到 Telegram Bot API 便可以取得 file_id,本篇用 Axios 來 POST,取得 file_id 的 code 如下:

console.log(userPhoto.data) 的結果會有 2 種,一種是使用者有設大頭照,一種則是沒有設定。

有大頭照:

使用者有設大頭照,photos有值
使用者有設大頭照,photos 有值

沒有大頭照:

使用者沒有大頭照,photos是空陣列
使用者沒有大頭照,photos 是空陣列

有設定大頭照,才能取得 file_id,Telegram 會回傳 3 種尺寸的圖檔 id。


file_path

有了 file_id,就可以拿 file_id 去取 file_path,一樣是 POST 取得,取得 file_path 的 code 如下:

console.log(filePath.data) 的結果如下圖:

取得的file_path
取得的 file_path

result.file_path 就是最後需要的 file_path


取得大頭照

有了 file_path,輸入以下網址就可以取得大頭照:

這是廣告,點擊一下可以幫本站多個一點點的廣告收入,謝謝

https://api.telegram.org/file/bot${token}/${file_path}

${token} 換成 Telegram Bot 的 token,${file_path} 換成上一段取得的 file_path,瀏覽器直接輸入網址按下 Enter,就會直接下載圖片,也可以拿網址當 img 的 src。


完整示範程式碼

最後附上 August 寫的 取得使用者大頭照 的程式碼:


參考資源

Telegram Bot API:getUserProfilePhotos

stack overflow:How can i get file_path of telegram bot


Telegram Bot 學習筆記系列

  1. 用 GCP + Node.js 接收 / 推播訊息
  2. 用 Google Apps Script 接收 / 推播訊息
  3. 鍵盤 Keyboard
  4. 命令列 Commands
  5. 取得使用者大頭照
  6. Google 表單提交時收到通知
Summary
Telegram Bot 學習筆記 - 5:取得使用者大頭照
Article Name
Telegram Bot 學習筆記 - 5:取得使用者大頭照
Description
本篇大綱:Telegram Bot 的大頭照要另外取得、取得使用者大頭照的流程、user_id、file_id、file_path、取得大頭照、完整示範程式碼、參考資源。要拿使用者大頭照,無法單純的只調用一個 API 就取得,實做的結果是調用了 3 個 API 才成功。
Augustus
Let's Write
Let's Write
https://letswrite.tw/wp-content/uploads/2020/08/logo_512.jpg

隨選筆記文

Bot LINE

LINE Bot:X-Line-Signature 簽名驗證 範例

Front-End

JavaScript 載入方式 defer、async

Front-End

GitLab Pages:3 + 2 個步驟讓 GitLab 專案產生靜態頁

Analytics Google

GA 自訂維度的應用 分類之下的文章成效

Front-End

用 CSS :target 製作頁籤、手風琴功能

Apps Script Google

用 Google Apps Script 取得 Google Sheets / Excel 資料

WordPress

Ubuntu 安裝 WordPress – 2:Webmin、Apache、MySQL、Hosts

Bot Slack

Slack 通知功能 可互動

Front-End

File API 客製上傳檔案按鈕 / input file

Front-End Vue

用 Vue.js 製作圖片版 EDM 生成器

以下是留言,但關於留言的部份必需先讓你們知道:

本站的文章都是 August 因為覺得有趣,才會實作並整理成筆記文而後進行發表。

如果留言是希望把 Demo 改成「你想要」的樣子,或是把功能改成「符合你需求」的樣子,

Sorry~ 除非那修改是 August 也有興趣的,不然不會幫你們寫程式去面對工作或是交作業。

未來這類的留言不會再主動回覆。😎

另外,公開信箱是為了讓金流驗證用,

因為之前遇過幾次回信協助解決問題後,對方卻一聲謝謝也沒有,就這樣拿去幫工作交差。

因此決定不再回覆信件,有疑問就利用留言功能囉。