How to Publish an Article to Medium Using Python and the Medium API

WHAT TO KNOW - Sep 1 - - Dev Community

<!DOCTYPE html>



Publishing to Medium with Python: A Comprehensive Guide

<br> body {<br> font-family: sans-serif;<br> line-height: 1.6;<br> margin: 0;<br> padding: 20px;<br> }</p> <p>h1, h2, h3, h4, h5, h6 {<br> font-weight: bold;<br> }</p> <p>img {<br> max-width: 100%;<br> height: auto;<br> }</p> <p>code {<br> background-color: #f5f5f5;<br> padding: 2px 5px;<br> font-family: monospace;<br> }</p> <p>pre {<br> background-color: #f5f5f5;<br> padding: 10px;<br> overflow-x: auto;<br> }</p> <p>.section-title {<br> margin-bottom: 20px;<br> }</p> <p>.step {<br> margin-bottom: 10px;<br> }<br>



Publishing to Medium with Python: A Comprehensive Guide



Medium has become a popular platform for bloggers, writers, and thought leaders to share their ideas and connect with a wider audience. While the platform offers a user-friendly interface for manual publishing, automating the process with Python can save you time and effort, especially if you frequently publish content or need to manage multiple accounts.



This comprehensive guide will walk you through the process of publishing articles to Medium using Python and the Medium API. We'll cover essential concepts, provide step-by-step instructions, and offer best practices to streamline your workflow.



Understanding the Medium API



The Medium API allows developers to interact with the platform programmatically. This empowers you to:


  • Create and publish articles
  • Manage drafts and publications
  • Retrieve user information and statistics
  • Interact with other Medium features


The API is based on the RESTful architecture, which means it uses standard HTTP methods (GET, POST, PUT, DELETE) to access resources. This makes it accessible and easy to use with Python libraries like 'requests'.



Setting Up Your Environment



Before diving into the code, you'll need to set up your development environment:


  1. Install Python: If you don't have Python installed, download it from the official website:
    https://www.python.org/downloads/ .
  2. Install the 'requests' Library: This library is used for making HTTP requests to the Medium API. You can install it using pip:
    pip install requests
  3. Create a Medium Developer Account: To use the API, you'll need a Medium developer account. Sign up at:
    https://medium.com/me/settings/developer .
  4. Generate an API Token: Once you have a developer account, generate a new API token. This token will be used to authenticate your requests. Refer to the Medium API documentation for instructions on generating a token:
    https://github.com/Medium/medium-api-docs . Medium API Token Page


Code Structure and Authentication



Let's start by outlining the basic structure of our Python script:



import requests

API Token (Replace with your actual token)

API_TOKEN = 'YOUR_API_TOKEN'

Base URL for API requests

BASE_URL = 'https://api.medium.com/v1'

Function to send API requests

def send_request(method, endpoint, data=None, headers=None):
url = f'{BASE_URL}/{endpoint}'
response = requests.request(method, url, data=data, headers=headers)
return response.json()

Function to authenticate with the Medium API

def authenticate(token):
headers = {
'Authorization': f'Bearer {token}',
}
return headers

Example usage:

headers = authenticate(API_TOKEN)
response = send_request('GET', 'me', headers=headers)
print(response)



This code defines functions to:


  • Send API requests using the 'requests' library.
  • Authenticate with your Medium API token.


The 'send_request' function handles making HTTP requests to the API, while the 'authenticate' function adds the necessary authorization header to authenticate your requests.



Publishing an Article



Now let's break down how to publish an article using the Medium API. The process can be divided into two main steps:



  1. Creating a Draft:
    You first need to create a draft of your article on Medium. This involves providing the title, content, and any other relevant information.

  2. Publishing the Draft:
    Once the draft is created, you can publish it to make it visible to your audience.


Creating a Draft



Here's an example of how to create a draft using Python:



def create_draft(title, content, publication_id=None):
headers = authenticate(API_TOKEN)
data = {
'title': title,
'content': content,
'canonicalUrl': '', # Optional: URL for the original source
'publishStatus': 'draft', # Set to 'draft' for now
}
if publication_id:
data['publicationId'] = publication_id
response = send_request('POST', 'users/me/posts', data=data, headers=headers)
return response


This function:


  • Takes the article title, content, and optionally the ID of a publication to publish to.
  • Sets the 'publishStatus' to 'draft' to create a draft initially.
  • Sends a POST request to the 'users/me/posts' endpoint to create the draft.


The response will contain information about the newly created draft, including its ID.



Publishing the Draft



Once you have a draft created, you can publish it by updating its status:



def publish_draft(draft_id):
headers = authenticate(API_TOKEN)
data = {
'publishStatus': 'public',
}
response = send_request('PUT', f'posts/{draft_id}', data=data, headers=headers)
return response


This function:


  • Takes the ID of the draft to publish.
  • Sets the 'publishStatus' to 'public'.
  • Sends a PUT request to the 'posts/{draft_id}' endpoint to update the draft status.


After successful publishing, the article will be visible on your Medium profile or the publication you selected.



Example Script



Here's a complete example script combining all the concepts we've discussed:



import requests

API_TOKEN = 'YOUR_API_TOKEN'
BASE_URL = 'https://api.medium.com/v1'

def send_request(method, endpoint, data=None, headers=None):
url = f'{BASE_URL}/{endpoint}'
response = requests.request(method, url, data=data, headers=headers)
return response.json()

def authenticate(token):
headers = {
'Authorization': f'Bearer {token}',
}
return headers

def create_draft(title, content, publication_id=None):
headers = authenticate(API_TOKEN)
data = {
'title': title,
'content': content,
'canonicalUrl': '',
'publishStatus': 'draft',
}
if publication_id:
data['publicationId'] = publication_id
response = send_request('POST', 'users/me/posts', data=data, headers=headers)
return response

def publish_draft(draft_id):
headers = authenticate(API_TOKEN)
data = {
'publishStatus': 'public',
}
response = send_request('PUT', f'posts/{draft_id}', data=data, headers=headers)
return response

Example usage

title = 'My Awesome Article'

content = '## Introduction\n\nThis is my awesome article...'

draft_response = create_draft(title, content)

draft_id = draft_response['data']['id']

publish_response = publish_draft(draft_id)

print(publish_response)






Best Practices





  • Error Handling:

    Implement error handling to gracefully deal with potential API errors. Check response status codes and handle exceptions accordingly.


  • Rate Limiting:

    Be mindful of the API's rate limits to avoid exceeding the allowed number of requests. Use delays or backoff mechanisms if necessary.


  • Content Formatting:

    Format your content correctly using Markdown syntax to ensure it renders properly on Medium.


  • Testing and Validation:

    Test your script thoroughly before using it for production purposes. Use the Medium API documentation for detailed endpoint information and validation rules.





Conclusion





By leveraging Python and the Medium API, you can streamline the publishing process and save valuable time. This guide has provided you with the essential knowledge and code examples to get started. Remember to explore the Medium API documentation for further customization and advanced features.





With this knowledge, you can automate your content creation workflow and focus on delivering high-quality content that resonates with your audience.




. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Terabox Video Player