Posting on Bluesky Social using Python in 1 minute
Incodable
Posted on September 26, 2023
Here I will explain quickly how to make a post on Bluesky using its underlying technology (ATProtocol).
First, you need to implement a method to login to Bluesky by creating a session using your regular username and password:
def bsky_login_session(host: str, handle: str, password: str) -> dict:
resp = requests.post(
host + "/xrpc/com.atproto.server.createSession",
json={"identifier": handle, "password": password},
)
resp.raise_for_status()
return resp.json()
Then you will create a post. Let's say a simple post containing a text and an image:
def create_image_post(host: str, handle: str, password: str, text: str, image_url: str):
session = bsky_login_session(host, handle, password)
now = datetime.now(timezone.utc).isoformat().replace("+00:00", "Z")
post = {
"$type": "app.bsky.feed.post",
"text": text,
"createdAt": now,
"embed": upload_images(host, session["accessJwt"], image_url)
}
# Post payload
resp = requests.post(
host + "/xrpc/com.atproto.repo.createRecord",
headers={"Authorization": "Bearer " + session["accessJwt"]},
json={
"repo": session["did"],
"collection": "app.bsky.feed.post",
"record": post,
},
)
resp.raise_for_status()
Now let's test it:
if __name__ == '__main__':
host = 'https://bsky.social'
handle = 'yourhandel.bsky.social'
password = 'your password'
create_image_post(host, handle, password, 'Cats are awesome', 'images/my_cat.jpg')
As simple as that! You could make your own personalized Bluesky bots which post stuff on the site. It's pretty straightforward and easy to set up, isn't it?
Happy coding
Al
💖 💪 🙅 🚩
Incodable
Posted on September 26, 2023
Join Our Newsletter. No Spam, Only the good stuff.
Sign up to receive the latest update from our blog.