Vừa qua mình có làm một task nho nhỏ về việc cập nhật thông tin bài viết của một tài khoản instagram xác định. Trong quá trình làm mình tìm thấy 1 vài hướng và cuối cùng chốt lại sử dụng Instagram Basic API. Bài viết là sự tổng hợp những gì bản thân mình đã tìm hiểu trong quá trình làm task
I. Giới thiệu
Instagram Basic Display là một HTTP-based API được xây dựng nhằm cung cấp một giao diện cho phép các ứng dụng có thể lấy thông tin về tài khoản của người dùng như bài viết, ảnh, video hay album.
1. Các API thành phần
Instagram Basic Display bao gồm 2 API thành phần chính
api.instagram.com
: sử dụng để xác thực và lấy token của người dùnggraph.instagram.com
: sử dụng để lấy token dài hạn cũng như thông tin của người dùng và thông tin của người dùng
2. Các quyền cần thiết
a. instagram_graph_user_profile
Quyền instagram_graph_user_profile cho phép ứng dụng có thể đọc được các thông tin cơ bản của một tài khoản người dùng bao gồm
- id
- username
- account_type
- media_count
Quyền này cũng cần thiết để truy cập được tới media của người dùng
b. instagram_graph_user_media
Quyền instagram_graph_user_media cho phép ứng dụng đọc các thông tin media của người dùng như ảnh, video hay album cũng như các edge liên quan.
Quyền này cần được cấp cùng với quyền instagram_graph_user_profile
Các trường có thể có của một media bao gồm
- id
- caption
- media_type (IMAGE, VIDEO hay CAROUSEL_ALBUM)
- media_url
- permalink
- thumbnail_url (chỉ cho kiểu VIDEO)
- timestamp
- username
3. Rate Limit
Ứng dụng bị hạn chế theo giờ là 200 * số lượng người dùng
II. Sử dụng cơ bản
1. Thiết lập ứng dụng
Việc đầu tiên, API này cung cấp giao diện cho các ứng dụng nên đương nhiên là phải khởi tạo một ứng dụng đã. Truy cập tới trang Meta for developers. Nếu chưa có tài khoản developer hãy tạo mới 1 cái.
Vào màn hình My Apps
Tiếp theo là khởi tạo một ứng dụng. Có thể chọn không có cho linh hoạt vì chúng ta chỉ sử dụng Instagram Basic Display thôi.
Sau khi nhập xong các thông tin cần thiết, tại màn ứng dụng, chọn instagram basic display
Tiếp theo điền các thông tin cần thiết cho ứng dụng ở Settings > Basic
Thêm một platform (ở đây mình chọn web)
Bây giờ thì khởi tạo 1 ứng dụng instagram basic display
Điền các url cần thiết
Cấp các quyền cần thiết
2. Tạo instagram basic display tester
Sau khi đã điền xong các thông tin cần thiết, có thể tạo tester để bắt đầu sử dụng api. Tại màn hình quản lý, vào Roles > Roles
Tại phần Instagram Testers, khởi tạo một tester cho ứng dụng (khác tài khoản developer)
Đăng nhập vào tài khoản tester, vào Settings > Apps and Websites > Tester Invites và chấp nhận.
3. Khởi tạo access token
Việc setup đã xong, giờ là lúc lấy access token để làm việc rồi. Sử dụng tài khoản tester truy cập tới đường dẫn
https://api.instagram.com/oauth/authorize
?client_id={instagram-app-id}
&redirect_uri={redirect-uri}
&scope={scope}
&response_type=code
&state={state} (có thể có hoặc không)
Tại màn hình cấp quyền chọn Allow
Nếu thành công chúng ta sẽ có một code trả về trên đường dẫn redirect
{redirect_uri}?code={authorization_code}
Sử dụng code vừa rồi để lấy một access token hợp lệ
curl -X POST \
https://api.instagram.com/oauth/access_token \
-F client_id={client_id} \
-F client_secret={client_secret} \
-F grant_type=authorization_code \
-F redirect_uri={redirect_uri} \
-F code={authorization_code}
Nếu thành công, ta sẽ có access token trong dữ liệu gửi về dưới dạng
{
"access_token": "{access_token}",
"user_id": {user_id}
}
Token này hoàn toàn có thể sử dụng được rồi. Tuy nhiên để ứng dụng có thể sử dụng lâu dài, ta sẽ lấy một token dài hạn hơn
curl -i -X GET "https://graph.instagram.com/access_token
?grant_type=ig_exchange_token
&client_secret={instagram-app-secret}
&access_token={short-lived-access-token}"
Nếu thành công, ta sẽ có một token mới với thời hạn 60 ngày
{
"access_token":"{long-lived-user-access-token}",
"token_type": "bearer",
"expires_in": 5183944 // Number of seconds until token expires
}
Token này có thể refesh sau 1 ngày và trước khi hết hạn
curl -i -X GET "https://graph.instagram.com/refresh_access_token
?grant_type=ig_refresh_token
&access_token={long-lived-access-token}"
4. Lấy thông tin cần thiết
Sau khi đã có token thì công việc còn lại khá là đơn giản. Chúng ta sẽ sử dụng graph.instagram.api
để lấy thông tin của người dùng
a. Lấy thông tin profile
Thông tin cơ bản của người dùng có thể lấy tại
GET /me?fields={fields}&access_token={access-token}
Xem thêm về user tại đây
b. Lấy thông tin media
API:
GET /me/media?fields={fields}&access_token={access-token}
Xem thêm về các fields tại đây
c. Lấy thông tin các item trong album
Đối với các media_type CAROUSEL_ALBUM sẽ có nhiều media, do đó có thể lấy thông tin các media có trong album tại
GET /{media-id}/children
III. References
https://developers.facebook.com/docs/instagram-basic-display-api/