Công nghệ, Python

[Python] đăng bài lên blogger bằng API blogger của Google

Hé lô các bạn.
Sau đây mình sẽ chỉ cho bạn cách kết nối API blogger của Google bằng python. Sự kết hợp này rất phù hợp cho bạn nào muốn làm cả trăm trang blog và muốn đăng nội dung cho nó mà không cần đăng nhập.
Lý do chính cho việc đăng bài viết này, Mình không thể tìm thấy hướng dẫn phù hợp bằng tiếng việt để mình có thể nghịch với mấy cái Api blogger này. Mình hy vọng hướng dẫn này cũng sẽ giúp bạn.
Có hai cách, bạn có thể tương tác với blog của mình bằng python:
  • Oauth 2.0
  • Mã API
Trong blog này, tôi sẽ chỉ ra cách chúng ta có thể tương tác với API blogger bằng cách sử dụng python với Oauth 2.0. Bước đầu tiên sẽ là tạo dự án và thông tin đăng nhập.
Vui lòng làm theo các bước dưới đây để tạo thông tin đăng nhập cho dự án của bạn. Các bước có trong video bên dưới, bạn có thể sử dụng nó để tạo tệp client_secret.json.

1. Mở trang  API của Google .

2. Nhấp vào Chọn dự án, sau đó nhấp vào New Project, và nhập tên cho dự án, và tùy chọn, chỉnh sửa ID dự án được cung cấp. Nhấp vào Tạo.

3. Trên trang Thông tin xác thực, hãy chọn Tạo thông tin xác thực, sau đó chọn OAuth client ID.4. Chọn Ứng dụng Web cho Loại Ứng dụng. Làm theo hướng dẫn để nhập nguồn gốc JavaScript, URI chuyển hướng hoặc cả hai và nhấp vào Tạo.

5. Trên trang xuất hiện, hãy sao chép ID ứng dụng khách và bí mật ứng dụng khách vào khay nhớ tạm vì bạn sẽ cần chúng khi định cấu hình thư viện ứng dụng khách của mình. 

Giờ bạn click vào  mũi tên tải xuống file client_secret.json.
Sau khi tạo dự án, bạn cần bật API Blogger v3 trong bảng điều khiển API của Google. Vui lòng làm theo các bước sau:
  1. Điều hướng đến API & Dịch vụ
  2. Tìm kiếm API Blogger
  3. Kích hoạt nó
Những bí mật về khách hàng của bạn sẽ giống như bên dưới:

1
{"web":{"client_id":"814572920180-5lua2cehvonjidhjck5sql4gf2roavu5.apps.googleusercontent.com","project_id":"wordpress-learning-203906","auth_uri":"https://accounts.google.com/o/oauth2/auth","token_uri":"https://oauth2.googleapis.com/token","auth_provider_x509_cert_url":"https://www.googleapis.com/oauth2/v1/certs","client_secret":"R0B_Ayy6A-PBhRIJ5nhUmFOe","redirect_uris":["http://localhost:8090/"]}
Lưu ý, sau khi tải xuống tệp client_secret.json, hãy đảm bảo thay đổi tên. Tên nên được đổi thành client_secret.json và đặt nó trong thư mục cho dù dự án hiện tại của bạn ở đâu. Thư mục dự án của tôi là ” E: \ blogger api \ python-blogger “
Mở dấu nhắc lệnh và chạy với tư cách quản trị viên, điều hướng đến thư mục dự án, của bạn và cài đặt các thư viện bên dưới:
  • pip install –upgrade google-api-python-client
  • pip install httplib2
  • pip install oauth2client

Hãy ủng hộ tôi 1 cốc caffe nếu bạn cảm thấy website có ích.!

Sau khi cài đặt các thư viện, hãy sao chép đoạn mã bên dưới và lưu vào thư mục dự án của bạn và lưu tệp với phần mở rộng .py,

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
# thêm các thư viện cần thiết vào
import httplib2
from oauth2client.client import flow_from_clientsecrets
from oauth2client.file import Storage
from oauth2client.tools import run_flow
from googleapiclient import discovery
# tạo các const client_secret file này được down từ console mà mình đề cập ở trên.
CLIENT_SECRET = 'client_secret.json'
SCOPE = 'https://www.googleapis.com/auth/blogger'
STORAGE = Storage('credentials.storage')
# Start the OAuth flow to retrieve credentials
def authorize_credentials():
# Fetch credentials from storage
credentials = STORAGE.get()
# If the credentials doesn't exist in the storage location then run the flow
if credentials is None or credentials.invalid:
flow = flow_from_clientsecrets(CLIENT_SECRET, scope=SCOPE)
http = httplib2.Http()
credentials = run_flow(flow, STORAGE, http=http)
return credentials
credentials = authorize_credentials()
print(credentials)
Sau khi lưu nó, hãy chạy chương trình python, sau đó bạn sẽ thấy một trình duyệt sẽ yêu cầu đăng nhập vào tài khoản Google của bạn và yêu cầu cấp quyền. Một khi bạn đã chấp nhận nó. Bạn sẽ thấy thông báo xác thực thành công.
Sau khi xác thực thành công, tệp tin credentials.storage sẽ được tạo trong thư mục dự án, vui lòng tham khảo ảnh chụp màn hình bên dưới.

Tệp Credentials.storage chứa tất cả thông tin cần thiết để xác thực, điều này ngăn chương trình xác thực lại mỗi khi chúng tôi đang chạy chương trình. Đây là một lần thiết lập.
Sau đó, tạo một hàm như bên dưới:

1
2
3
4
5
def get_pages_from_jobs(blogId):
    credentials = authorize_credentials()
    http = credentials.authorize(httplib2.Http())
    discoveryUrl = ('https://www.googleapis.com/blogger/')
    service = discovery.build('blogger', 'v3', http=http, discoveryServiceUrl=discoveryUrl)
* Lưu ý: hãy cẩn thận với phần thụt đầu dòng, nếu bạn gặp vấn đề khi sao chép từ đây, bạn có thể kiểm tra lại.
Cuối chương trình, chúng ta cần gọi hàm trên. Sau hàm, code sẽ giống như sau:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
import httplib2
from oauth2client.client import flow_from_clientsecrets
from oauth2client.file import Storage
from oauth2client.tools import run_flow
from googleapiclient import discovery
CLIENT_SECRET = 'client_secret.json'
SCOPE = 'https://www.googleapis.com/auth/blogger'
STORAGE = Storage('credentials.storage')
# Start the OAuth flow to retrieve credentials
def authorize_credentials():
# Fetch credentials from storage
    credentials = STORAGE.get()
# If the credentials doesn't exist in the storage location then run the flow
    if credentials is None or credentials.invalid:
        flow = flow_from_clientsecrets(CLIENT_SECRET, scope=SCOPE)
        http = httplib2.Http()
        credentials = run_flow(flow, STORAGE, http=http)
    return credentials
credentials = authorize_credentials()
print(credentials)
def get_pages_from_jobs(blogId):
    credentials = authorize_credentials()
    http = credentials.authorize(httplib2.Http())
    discoveryUrl = ('https://www.googleapis.com/blogger/')
    service = discovery.build('blogger', 'v3', http=http, discoveryServiceUrl=discoveryUrl)
   
get_pages_from_jobs(xxxxxxx)
Sau đó, bạn có thể sao chép mã bên dưới, bạn có thể sao chép mã tương ứng cho các hành động tương ứng:

1. Đối với User

Thêm mã bên dưới ngay bên dưới   service = explore.build (‘blogger’, ‘v3’, http = http, exploreServiceUrl = exploreUrl)

1
2
3
4
users = service.users()
# Retrieve this user's profile information
thisuser = users.get(userId='self').execute()
print('This user\'s display name is: %s' % thisuser['displayName'])

2. Đối với danh sách cho blog

Để liệt kê các blog, chúng ta cần thêm mã bên dưới  cùng với hành động đầu tiên ở trên, ngay bên dưới print(‘This user\’s display name is: %s’ % thisuser[‘displayName’])

1
2
3
4
5
blogs = service.blogs()
# Retrieve the list of Blogs this user has write privileges on
thisusersblogs = blogs.listByUser(userId='self').execute()
for blog in thisusersblogs['items']:
print('The blog named \'%s\' is at: %s' % (blog['name'], blog['url']))

3. Đối với các bài đăng liên quan đến người dùng cụ thể

Để liệt kê các blog, chúng tôi cần thêm code bên dưới cùng với hành động thứ nhất, thứ hai ở trên, Thêm mã bên dưới ngay bên dưới   print(‘The blog named \’%s\’ is at: %s’ % (blog[‘name’], blog[‘url’]))

1
2
3
4
5
blogs = service.blogs()
# Retrieve the list of Blogs this user has write privileges on
thisusersblogs = blogs.listByUser(userId='self').execute()
for blog in thisusersblogs['items']:
print('The blog named \'%s\' is at: %s' % (blog['name'], blog['url']))

4. Để nhận một trang cụ thể bằng cách sử dụng ID

Mã này độc lập với các hành động 1,2,3 ở trên, bạn có thể chỉ mã bên dưới ngay bên dưới service = discovery.build(‘blogger’, ‘v3’, http=http, discoveryServiceUrl=discoveryUrl)

1
2
3
page=service.pages()
onepage=page.get(blogId=’xxxxx’,pageId=’xxxxx’).execute()
print("this will show specific onepage", onepage)

5.Để tạo nhiều bài viết / trang (trong bản nháp)

Mã này độc lập với các hành động 1,2,3 ở trên, bạn có thể chỉ mã bên dưới ngay bên dưới   service = explore.build (‘blogger’, ‘v3’, http = http, exploreServiceUrl = exploreUrl)

1
2
3
4
5
6
7
8
9
cities=['canada','singapore','germany','italy']
for item in cities:
title="title something"+item
payload={
"content": "nội dung test",
"title": title
}
respost=page.insert(blogId='xxxx',body=payload,isDraft=True).execute() #publishing the new post
print("printing the page id:",respost['id'])

6. Để cập nhật bài đăng hiện có với ID

Mã này độc lập với các hành động 1,2,3 ở trên, bạn có thể chỉ mã bên dưới  ngay bên dưới   service = explore.build (‘blogger’, ‘v3’, http = http, exploreServiceUrl = exploreUrl)

1
2
3
4
5
payload={
"content": "đây là nội dung test",
"title": title
}
respost=page.update(blogId=’xxxxxx’, pageId=’xxxxx’, body=payload, publish=True).execute() #updating the existing post/page
Mình hy vọng bài viết này hữu ích cho các bạn!

Hãy ủng hộ tôi 1 cốc caffe nếu bạn cảm thấy website có ích.!

Được gắn thẻ