Spaces:
Running
Running
| import os | |
| import json | |
| import requests | |
| from google.auth.transport.requests import Request | |
| from google.oauth2.credentials import Credentials | |
| from google_auth_oauthlib.flow import InstalledAppFlow | |
| SCOPES = ['https://www.googleapis.com/auth/blogger'] | |
| BLOG_ID = 'YOUR_BLOG_ID_HERE' | |
| class BloggerClient: | |
| def __init__(self, client_secrets_file='client_secret.json', token_file='token.json'): | |
| self.client_secrets_file = client_secrets_file | |
| self.token_file = token_file | |
| self.creds = None | |
| self.service_url = 'https://www.googleapis.com/blogger/v3/blogs' | |
| self.authenticate() | |
| def authenticate(self): | |
| if os.path.exists(self.token_file): | |
| self.creds = Credentials.from_authorized_user_file(self.token_file, SCOPES) | |
| if not self.creds or not self.creds.valid: | |
| if self.creds and self.creds.expired and self.creds.refresh_token: | |
| self.creds.refresh(Request()) | |
| else: | |
| flow = InstalledAppFlow.from_client_secrets_file( | |
| self.client_secrets_file, SCOPES) | |
| self.creds = flow.run_console() | |
| with open(self.token_file, 'w') as token: | |
| token.write(self.creds.to_json()) | |
| def get_blog_info(self): | |
| url = f"{self.service_url}/{BLOG_ID}" | |
| headers = {'Authorization': f'Bearer {self.creds.token}'} | |
| response = requests.get(url, headers=headers) | |
| return response.json() | |
| def create_post(self, title, content, labels=[]): | |
| url = f"{self.service_url}/{BLOG_ID}/posts/" | |
| headers = { | |
| 'Authorization': f'Bearer {self.creds.token}', | |
| 'Content-Type': 'application/json' | |
| } | |
| post_data = { | |
| 'kind': 'blogger#post', | |
| 'blog': {'id': BLOG_ID}, | |
| 'title': title, | |
| 'content': content, | |
| 'labels': labels | |
| } | |
| response = requests.post(url, headers=headers, data=json.dumps(post_data)) | |
| return response.json() |