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
- Crearse una página en LinkedIn (de empresa o escuela)
- Crearse una app y linkearla a la página
- Verificar la app con una cuenta de admin de la pagina
- Solicitar los accesos correspondientes (en el panel de control de la app)
Lo próximo es loggear a un usuario por OAuth
- 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
- 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
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
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