Skip to content

Instantly share code, notes, and snippets.

@leonardof02
Last active April 23, 2025 13:04
Show Gist options
  • Select an option

  • Save leonardof02/e23eb1cf1530fe56ab27ccb87f7402be to your computer and use it in GitHub Desktop.

Select an option

Save leonardof02/e23eb1cf1530fe56ab27ccb87f7402be to your computer and use it in GitHub Desktop.
Guide for upload content for LinkedIn via API

Acceso a la API

Important

Las acciones permitidas a cualquier empresa o desarrollador son poder autenticarse con LinkedIn usando OAuth y publicar contenido en su perfil

Para poder conectarse a la API de LinkedIn:

Lo primero es crear la app (equivalente a un bot) con los accesos correspondientes

  1. Crearse una página en LinkedIn (de empresa o escuela)
  2. Crearse una app y linkearla a la página
  3. Verificar la app con una cuenta de admin de la pagina
  4. Solicitar los accesos correspondientes (en el panel de control de la app)

Lo próximo es loggear a un usuario por OAuth

  1. Ir a la consola de desarrollador y generar un token de acceso en el OAuth token generator o programar un flujo de trabajo para autenticar al usuario por OAuth especificado en la documentación de Microsoft
  2. Obtener el token de acceso

Warning

Para tener acceso a los perfiles es necesario llenar el formulario al solicitar acceso al producto Advertising API, con los datos de la empresa

Acciones

Acceder al Id del usuario autenticado

Hacer un GET a https://api.linkedin.com/v2/userinfo con el token en el header

ACCESS_TOKEN = "..." # Token obtenido de autenticar con OAuth o generado en la pagina de desarrollador

def get_user_info(linkedin_access_token: str):
    headers = {'Authorization': f'Bearer {linkedin_access_token}'}
    response: Response = requests.get(
        "https://api.linkedin.com/v2/userinfo", headers=headers)
    return response.json()

El primer campo que sale es el id del usuario, el resto es info del usuario

Postear una publicación en LinkedIn

Revisar la documentación para publicar contenido

El contenido puede tener visibilidad PUBLIC o CONNECTIONS (visible solo para los contactos)

El tipo de publicación puede ser NONE (solo texto), ARTICLE (para referenciar un articulo original) o IMAGE para subir imágenes a la publicación

Si estás publicando en tu perfil, hay que especificar el author_type como person, para publicar en una pagina de la que el usuario es admin el author_type es organization. Para ambos es importante especificar el Id, el de usuario se obtiene como dije arriba

El de organización es el id que aparece en la URL del perfil de organización

Para adjuntar archivos estan los campos media, explicados en la documentacion

Ejemplo de código

from requests import Response
import requests

ACCESS_TOKEN = "..."
USER_ID = "at13eGueUR" # Mi user id

def publish_article(linkedin_access_token: str):
    author_type = "person"  # Or organization
    visibility = "CONNECTIONS"  # Or PUBLIC
    article_content = "Este articulo ha sido generado por la API de Linkedin a modo de prueba"

    url = "https://api.linkedin.com/v2/ugcPosts"
    headers = {'Authorization': f'Bearer {linkedin_access_token}',
               'Content-Type': 'application/json'}

    body = {
        'author': f"urn:li:{author_type}:{USER_ID}",
        'lifecycleState': "PUBLISHED",
        'specificContent': {
            "com.linkedin.ugc.ShareContent": {
                "shareCommentary": {
                    "text": f"{article_content}"
                },
                "shareMediaCategory": "NONE",  # NONE / ARTICLE / IMAGE
                # "media": [
                # {
                #     "status": "READY", # Obligatorio
                #     "description": {
                #         "text": "Official LinkedIn Blog - Your source for insights and information about LinkedIn."
                #     },
                #     "originalUrl": "https://blog.linkedin.com/",
                #     "title": {
                #         "text": "Official LinkedIn Blog"
                #     }
                # }
                #    ]
            }
        },
        "visibility": {
            "com.linkedin.ugc.MemberNetworkVisibility": f"{visibility}"
        }
    }
    response: Response = requests.post(
        url, headers=headers, json=body)
    return response.json()

article = publish_article(ACCESS_TOKEN)
print(article)

Guía mejor explicada que la doc de Microsoft:

https://cloudnativeengineer.substack.com/p/how-to-publish-a-post-with-the-linkedin

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment