Spaces:
Running
Running
Commit ·
e73bcbd
1
Parent(s): 0f87374
Refactor post_blog.py to improve image handling and update OAuth credentials management
Browse files- get_refresh_token.py +30 -0
- main.py +0 -1
- post_blog.py +32 -23
get_refresh_token.py
ADDED
|
@@ -0,0 +1,30 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
import httplib2
|
| 2 |
+
from oauth2client.client import flow_from_clientsecrets
|
| 3 |
+
from oauth2client.file import Storage
|
| 4 |
+
from oauth2client.tools import run_flow
|
| 5 |
+
from googleapiclient import discovery
|
| 6 |
+
|
| 7 |
+
# Start the OAuth flow to retrieve credentials
|
| 8 |
+
def authorize_credentials():
|
| 9 |
+
CLIENT_SECRET = 'client_secret_6.json'
|
| 10 |
+
SCOPE = 'https://www.googleapis.com/auth/blogger'
|
| 11 |
+
STORAGE = Storage('credentials.storage.json')
|
| 12 |
+
credentials = STORAGE.get()
|
| 13 |
+
if credentials is None or credentials.invalid:
|
| 14 |
+
flow = flow_from_clientsecrets(CLIENT_SECRET, scope=SCOPE)
|
| 15 |
+
http = httplib2.Http()
|
| 16 |
+
credentials = run_flow(flow, STORAGE, http=http)
|
| 17 |
+
return credentials
|
| 18 |
+
|
| 19 |
+
def getBloggerService():
|
| 20 |
+
credentials = authorize_credentials()
|
| 21 |
+
http = credentials.authorize(httplib2.Http())
|
| 22 |
+
discoveryUrl = ('https://blogger.googleapis.com/$discovery/rest?version=v3')
|
| 23 |
+
service = discovery.build('blogger', 'v3', http=http, discoveryServiceUrl=discoveryUrl)
|
| 24 |
+
return service
|
| 25 |
+
|
| 26 |
+
if __name__ == '__main__':
|
| 27 |
+
try:
|
| 28 |
+
getBloggerService()
|
| 29 |
+
except Exception as e:
|
| 30 |
+
print(str(e))
|
main.py
CHANGED
|
@@ -8,7 +8,6 @@ from post_blog import post_blog
|
|
| 8 |
# Load environment variables
|
| 9 |
dotenv.load_dotenv()
|
| 10 |
summarizer_api_key = os.getenv("SUMMARIZER_API_KEY")
|
| 11 |
-
mail_api = os.getenv("MAIL_API")
|
| 12 |
access_key = os.getenv("ACCESS_KEY")
|
| 13 |
|
| 14 |
def paper_data(paper_data):
|
|
|
|
| 8 |
# Load environment variables
|
| 9 |
dotenv.load_dotenv()
|
| 10 |
summarizer_api_key = os.getenv("SUMMARIZER_API_KEY")
|
|
|
|
| 11 |
access_key = os.getenv("ACCESS_KEY")
|
| 12 |
|
| 13 |
def paper_data(paper_data):
|
post_blog.py
CHANGED
|
@@ -8,27 +8,24 @@ import mistune
|
|
| 8 |
|
| 9 |
dotenv.load_dotenv()
|
| 10 |
access_key = os.getenv('ACCESS_KEY')
|
| 11 |
-
client_id = os.getenv('
|
| 12 |
-
client_secret = os.getenv('
|
| 13 |
-
refresh_token = os.getenv('
|
| 14 |
blog_id = os.getenv('BLOG_ID')
|
| 15 |
|
| 16 |
def extract_summary(text):
|
| 17 |
-
|
|
|
|
| 18 |
if match:
|
| 19 |
return match.group(1).replace("#", "").replace("\n", "").strip()
|
| 20 |
return None
|
| 21 |
|
| 22 |
def generate_image(title, summary, category):
|
| 23 |
extracted_summary = extract_summary(summary)
|
| 24 |
-
|
|
|
|
| 25 |
url = f"https://image.pollinations.ai/prompt/(({category}))%20{title}%20%3A%20{extracted_summary}?width=1280&height=720&seed=623862700&nologo=true&model=turbo"
|
| 26 |
-
|
| 27 |
-
with open("image.png", "wb") as file:
|
| 28 |
-
file.write(data)
|
| 29 |
-
encoded_image = base64.b64encode(data)
|
| 30 |
-
image = f"data:image/png;base64,{encoded_image.decode('utf-8')}"
|
| 31 |
-
return image
|
| 32 |
|
| 33 |
def generate_post_html(title, summary, mindmap, category, citation):
|
| 34 |
image = generate_image(title, summary, category)
|
|
@@ -67,7 +64,7 @@ def generate_post_html(title, summary, mindmap, category, citation):
|
|
| 67 |
</p>
|
| 68 |
</div>
|
| 69 |
"""
|
| 70 |
-
return post
|
| 71 |
|
| 72 |
def sanitize_citation(citation):
|
| 73 |
pattern = r"(https://doi\.org/\S+)"
|
|
@@ -82,18 +79,18 @@ def sanitize_citation(citation):
|
|
| 82 |
def create_post(title, category, summary, mindmap, citation):
|
| 83 |
post_title = f"{title}"
|
| 84 |
post_category = f"{category}"
|
| 85 |
-
post_body = generate_post_html(title, summary, mindmap, category, sanitize_citation(citation))
|
| 86 |
-
return post_title, post_category, post_body
|
| 87 |
|
| 88 |
-
def post_post(title, category, body):
|
| 89 |
try:
|
| 90 |
data = requests.post(
|
| 91 |
url='https://oauth2.googleapis.com/token',
|
| 92 |
data={
|
| 93 |
'grant_type': 'refresh_token',
|
| 94 |
-
'client_secret':
|
| 95 |
-
'refresh_token':
|
| 96 |
-
'client_id':
|
| 97 |
},
|
| 98 |
).json()
|
| 99 |
url = f"https://blogger.googleapis.com/v3/blogs/{blog_id}/posts"
|
|
@@ -106,14 +103,21 @@ def post_post(title, category, body):
|
|
| 106 |
"blog": {
|
| 107 |
"id": blog_id
|
| 108 |
},
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 109 |
"title": title,
|
| 110 |
"content": body,
|
| 111 |
"labels": [category, "recent"]
|
| 112 |
}
|
| 113 |
data = requests.post(url, headers=headers, json=post_data).json()
|
| 114 |
-
print(data)
|
| 115 |
-
|
| 116 |
-
|
|
|
|
|
|
|
| 117 |
except Exception as e:
|
| 118 |
print('An error occurred:', str(e))
|
| 119 |
return False
|
|
@@ -122,8 +126,13 @@ def post_blog(title, category, summary, mindmap, citation, uaccess_key):
|
|
| 122 |
if uaccess_key != access_key:
|
| 123 |
return False
|
| 124 |
try:
|
| 125 |
-
post_title, post_category, post_body = create_post(title, category, summary, mindmap, citation)
|
| 126 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 127 |
if status:
|
| 128 |
print('Post created successfully')
|
| 129 |
return True
|
|
|
|
| 8 |
|
| 9 |
dotenv.load_dotenv()
|
| 10 |
access_key = os.getenv('ACCESS_KEY')
|
| 11 |
+
client_id = os.getenv('CLIENT_ID_1')
|
| 12 |
+
client_secret = os.getenv('CLIENT_SECRET_1')
|
| 13 |
+
refresh_token = os.getenv('REFRESH_TOKEN_1')
|
| 14 |
blog_id = os.getenv('BLOG_ID')
|
| 15 |
|
| 16 |
def extract_summary(text):
|
| 17 |
+
text = text.replace("#", "").strip().lower()
|
| 18 |
+
match = re.search(r"summary(.*?)highlights", text.replace("#", ""), re.DOTALL)
|
| 19 |
if match:
|
| 20 |
return match.group(1).replace("#", "").replace("\n", "").strip()
|
| 21 |
return None
|
| 22 |
|
| 23 |
def generate_image(title, summary, category):
|
| 24 |
extracted_summary = extract_summary(summary)
|
| 25 |
+
if extracted_summary is None:
|
| 26 |
+
extracted_summary = title
|
| 27 |
url = f"https://image.pollinations.ai/prompt/(({category}))%20{title}%20%3A%20{extracted_summary}?width=1280&height=720&seed=623862700&nologo=true&model=turbo"
|
| 28 |
+
return url
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 29 |
|
| 30 |
def generate_post_html(title, summary, mindmap, category, citation):
|
| 31 |
image = generate_image(title, summary, category)
|
|
|
|
| 64 |
</p>
|
| 65 |
</div>
|
| 66 |
"""
|
| 67 |
+
return post, image
|
| 68 |
|
| 69 |
def sanitize_citation(citation):
|
| 70 |
pattern = r"(https://doi\.org/\S+)"
|
|
|
|
| 79 |
def create_post(title, category, summary, mindmap, citation):
|
| 80 |
post_title = f"{title}"
|
| 81 |
post_category = f"{category}"
|
| 82 |
+
post_body, post_image = generate_post_html(title, summary, mindmap, category, sanitize_citation(citation))
|
| 83 |
+
return post_title, post_category, post_body, post_image
|
| 84 |
|
| 85 |
+
def post_post(title, category, body, image, i):
|
| 86 |
try:
|
| 87 |
data = requests.post(
|
| 88 |
url='https://oauth2.googleapis.com/token',
|
| 89 |
data={
|
| 90 |
'grant_type': 'refresh_token',
|
| 91 |
+
'client_secret': os.getenv(f'CLIENT_SECRET_{i}'),
|
| 92 |
+
'refresh_token': os.getenv(f'REFRESH_TOKEN_{i}'),
|
| 93 |
+
'client_id': os.getenv(f'CLIENT_ID_{i}'),
|
| 94 |
},
|
| 95 |
).json()
|
| 96 |
url = f"https://blogger.googleapis.com/v3/blogs/{blog_id}/posts"
|
|
|
|
| 103 |
"blog": {
|
| 104 |
"id": blog_id
|
| 105 |
},
|
| 106 |
+
"images": [
|
| 107 |
+
{
|
| 108 |
+
"url": image
|
| 109 |
+
}
|
| 110 |
+
],
|
| 111 |
"title": title,
|
| 112 |
"content": body,
|
| 113 |
"labels": [category, "recent"]
|
| 114 |
}
|
| 115 |
data = requests.post(url, headers=headers, json=post_data).json()
|
| 116 |
+
print(data['status'])
|
| 117 |
+
if data['status'] == 'LIVE':
|
| 118 |
+
return True
|
| 119 |
+
else:
|
| 120 |
+
return False
|
| 121 |
except Exception as e:
|
| 122 |
print('An error occurred:', str(e))
|
| 123 |
return False
|
|
|
|
| 126 |
if uaccess_key != access_key:
|
| 127 |
return False
|
| 128 |
try:
|
| 129 |
+
post_title, post_category, post_body, post_image = create_post(title, category, summary, mindmap, citation)
|
| 130 |
+
i = 1
|
| 131 |
+
status = False
|
| 132 |
+
while (i <= 6 and not status):
|
| 133 |
+
print(f'Posting... Tries: {i}')
|
| 134 |
+
status = post_post(post_title, post_category, post_body, post_image, i)
|
| 135 |
+
i += 1
|
| 136 |
if status:
|
| 137 |
print('Post created successfully')
|
| 138 |
return True
|