Automating Image Uploads to Facebook Page using Python and Facebook Graph API

A.T.M Ruhul Amin
3 min readJan 8, 2024

--

Automating-Image-Uploads-to-Facebook-Page-using-Python-and-Facebook-Graph-API

In this article, we’ll explore how to automate the process of uploading images to a Facebook page using Python and the Facebook Graph API. Whether you want to share a single image or multiple images in a single post, this guide will walk you through the steps.

Prerequisites

Before we get started, make sure you have the following:

  • A Facebook Developer account
  • An App created on the Facebook Developer portal
  • App ID and App Secret
  • Page ID and Page Access Token

Note : I’m assuming you’re already familiar with the developer portal and tasks like creating an app or generating a page access token. However, if you’re not acquainted with these processes, feel free to reach out — I’d be more than happy to assist you through separate articles.

Setup

  1. Install Required Libraries
pip install requests Pillow

2. Facebook Graph API Access

  • Obtain your Page Access Token.
  • Retrieve your Page ID.

Uploading a Single Image

Now, you need to create a function called post_single_photo. This function is crafted to simplify the process of uploading a single image to a specified Facebook page using the Facebook Graph API. It accepts crucial parameters, including the target page's ID (page_id), the page's access token (page_access_token), an optional message to accompany the photo (message), and the specific URL of the photo to be uploaded (photo_url). Refer to the Python code below for details.

import requests

def post_single_photo(page_id, page_access_token, message, photo_url):
url = f"https://graph.facebook.com/v13.0/{page_id}/photos"
params = {
'access_token': page_access_token,
'message': message,
'url': photo_url,
}

try:
response = requests.post(url, params=params)
result = response.json()

if 'id' in result:
print(f"Photo posted successfully. Post ID: {result['id']}")
else:
print(f"Error posting photo: {result}")

except requests.exceptions.RequestException as e:
print(f"Request error: {e}")

# Replace with your actual values

page_id = 'YOUR_PAGE_ID'
page_access_token = 'YOUR_ACCESS_TOKEN'
message = 'Your message goes here'
photo_url = 'https://example.com/your-photo.jpg'

post_single_photo(page_id, page_access_token, message, photo_url)

Uploading Multiple Images Using Scheduling Posts with Unpublished Photos

Now, you need to follow a series of steps where you first upload photos with the published state set to false. Afterward, obtain the IDs of the unpublished photos and use those IDs to schedule a post to the /me/feed endpoint. Please refer to the Python code provided below for guidance.

import requests

def schedule_posts_with_unpublished_photos(page_id, page_access_token, message, photo_urls):
# Step 1: Upload photos with published state set to false
photo_ids = []
for photo_url in photo_urls:
upload_url = f'https://graph.facebook.com/v13.0/{page_id}/photos'
params = {
'access_token': page_access_token,
'published': 'false',
'url': photo_url,
}

try:
response = requests.post(upload_url, params=params)
result = response.json()

if 'id' in result:
photo_ids.append(result['id'])
else:
print(f"Error uploading photo: {result}")

except requests.exceptions.RequestException as e:
print(f"Request error: {e}")

# Step 2: Use the IDs of unpublished photos to schedule a post
url = f'https://graph.facebook.com/v13.0/me/feed'
params = {
'access_token': page_access_token,
'message': message,
}

for photo_id in photo_ids:
params[f'attached_media[{photo_id}]'] = f'{{"media_fbid":"{photo_id}"}}'

try:
response = requests.post(url, params=params)
result = response.json()

if 'id' in result:
print(f"Post scheduled successfully. Post ID: {result['id']}")
else:
print(f"Error scheduling post: {result}")

except requests.exceptions.RequestException as e:
print(f"Request error: {e}")

# Replace with your actual values

page_id = 'YOUR_PAGE_ID'
page_access_token = 'YOUR_ACCESS_TOKEN'
message = 'Your message goes here'
photo_urls = [
'https://example.com/photo1.jpg',
'https://example.com/photo2.jpg',
]

schedule_posts_with_unpublished_photos(page_id, page_access_token, message, photo_urls)

Conclusion

In this tutorial, we covered the process of automating image uploads to a Facebook page using Python and the Facebook Graph API. Whether you have a single image or multiple images to share, you can adapt the provided code to suit your needs.

Additional Resources

--

--

A.T.M Ruhul Amin

Tech Lead | Java | Spring Boot | Python | React | Angular | Serverless | AWS Certified | AWS Community Builder | GitHub Link : https://github.com/ruhulmus