La forma más sencilla:
https://www.addtoany.com/buttons/for/website
Generar el código y ponerlo en tu web (en el caso de Linkedin hace caso omiso a las metas de og, simplemente coge la primera imagen que encuentra)
Mostrando entradas con la etiqueta API Linkedin. Mostrar todas las entradas
Mostrando entradas con la etiqueta API Linkedin. Mostrar todas las entradas
API Linkedin (Mayo 2019)
En https://www.linkedin.com/developers/ registrar una nueva APP para obtener el client_id y client_secret (verificar tb la empresa a la que asocias dicha APP).
index.php:
funciones.php:
config.php:
test_linkedin.php
index.php:
require("config.php");
require("funciones.php");
getAuthorizationCode();
funciones.php:
if (! session_id()) {
session_start();
}
function getAuthorizationCode() {
$params = array(
'response_type' => 'code',
'client_id' => CLIENT_ID,
'scope' => SCOPE,
'state' => uniqid('', true), // unique long string
'redirect_uri' => REDIRECT_URI,
);
// $url = 'https://www.linkedin.com/uas/oauth2/authorization?' . http_build_query($params);
$url = 'https://www.linkedin.com/oauth/v2/authorization?'.http_build_query($params);
$_SESSION['state'] = $params['state'];
// echo $url;
header("Location: $url");
exit;
}
config.php:
define("CLIENT_ID", "77xxxx4hr97s30");
define("CLIENT_SECRET", "LRxxxxPZd2UgEV4Z");
define("REDIRECT_URI", "http://localhost/pruebas/linkedin/test_linkedin.php");
// define("SCOPE", 'r_basicprofile r_emailaddress');
define("SCOPE", "r_liteprofile r_emailaddress");
test_linkedin.php
require("config.php");
require("funciones.php");
$_SESSION['access_token'] = $_REQUEST["code"];
$url = "https://www.linkedin.com/oauth/v2/accessToken?grant_type=authorization_code&code=".$_GET["code"]."&redirect_uri=http://localhost/pruebas/linkedin/test_linkedin.php&client_id=".CLIENT_ID."&client_secret=".CLIENT_SECRET;
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL,$url."&format=json");
curl_setopt($ch, CURLOPT_POST, 0);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$server_output2 = curl_exec ($ch);
curl_close ($ch);
if ($server_output2 === false) {
exit("Error Number: " . curl_errno($ch) . "<br>Error String: " . curl_error($ch) . "<br>Info: " . print_r(curl_getinfo($ch), true));
}
else {
$obj = json_decode($server_output);
}
$_SESSION['access_token'] = $obj->access_token;
// sacar datos básicos
$url = "https://api.linkedin.com/v2/me/?oauth2_access_token=".$_SESSION['access_token']; // ."&projection=(id,firstName,email-address)";
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL,$url);
curl_setopt($ch, CURLOPT_POST, 0);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$server_output2 = curl_exec ($ch);
curl_close ($ch);
$user_data = json_decode($server_output2);
echo "<br>Nombre: ".$user_data->firstName->localized->es_ES;
echo "<br>Apellidos: ".$user_data->lastName->localized->es_ES;
$url = "https://api.linkedin.com/v2/emailAddress?oauth2_access_token=".$_SESSION['access_token']."&q=members&projection=(elements*(handle~))"; //."&q=members&projection=(elements*(handle~))";
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL,$url);
curl_setopt($ch, CURLOPT_POST, 0);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$server_output2 = curl_exec ($ch);
curl_close ($ch);
$user_data = json_decode($server_output2);
// echo "<br>Email: ".$user_data->elements[0]->handle~->emailAddress;
// print_r($user_data);
foreach ($user_data->elements[0] as $clave=>$valor) {
if (isset($valor->emailAddress)) {
echo "<br>Email:".$valor->emailAddress;
}
}
Facebook, Twitter y Linkedin: Metas para compartir
<meta property="og:type" content="website"/>
<meta property='og:url' content='https://www.youtube.com/watch?v=Kvj_qEPgPps' />
<meta property="og:title" content="Atrápame si puedes (2002) de Steven Spielberg"/>
<meta property="og:description" content="Atrápame si puedes (2002) de Steven Spielberg">
<meta property="og:image" content="https://www.midominio.com/images/rrss/facebook.jpg">
<meta name="twitter:card" content="summary"/>
<meta name="twitter:url" content="https://www.youtube.com/watch?v=Kvj_qEPgPps"/>
<meta name="twitter:title" content="Atrápame si puedes (2002) de Steven Spielberg"/>
<meta name="twitter:description" content="Atrápame si puedes (2002) de Steven Spielberg"/>
<meta name="twitter:image" content="https://i2.ytimg.com/vi/Kvj_qEPgPps/default.jpg"/>
Información de Twitter:
https://developer.twitter.com/en/docs/tweets/optimize-with-cards/overview/summary
Para Linkedin los metas son los mismos que Facebook pero es aconsejable también añadir:
<meta property="og:image:secure_url" content="https://www.midominio.com/images/rrss/linkedin.jpg">
Para chequearlo en FB:
https://developers.facebook.com/tools/debug/
Para chequearlo en Twitter:
https://cards-dev.twitter.com/validator
Para chequearlo en Linkedin:
https://www.linkedin.com/post-inspector/inspect/
Si en Twitter te diera el error de:
Fetching the page failed because it's denied by robots.txt
Para solucionarlo hay que poner en nuestro robots.txt:
User-agent: Twitterbot
allow:
Más información en: https://www.flimper.com/blog/es/que-es-open-graph-y-como-se-hace
Ejemplo de compartir vídeo de YouTube:
<a href="https://www.facebook.com/sharer/sharer.php?u=https://www.youtube.com/watch?v=Y8UFpmqYTMY">xxx</a>
<a href="https://twitter.com/intent/tweet?url=https://www.youtube.com/watch?v=Y8UFpmqYTMY&text=prueba">xxx</a>
<a href="https://www.linkedin.com/sharing/share-offsite/?url=https://www.youtube.com/embed/Y8UFpmqYTMY">xxx</a>
<a href="https://api.whatsapp.com/send?text=https://www.youtube.com/watch?v=Y8UFpmqYTMY">xxx</a>
Ejemplo de compartir imagen:
<a href="https://www.facebook.com/sharer/sharer.php?u=https://www.midominio.com/imagenes/slide20191106105324.jpg">xxx</a>
<a href="https://twitter.com/intent/tweet?url=https://www.midominio.com/twitter.php?id=3">xxx</a>
En twitter.php debe tener los metas de twitter:
<?php
require("inc_config.php");
$sql = "SELECT * FROM mitabla where id = ".$id;
$db->query($sql);
$db->next_record();
$imagenShare = $base."imagenes/noticias/".$db->Record["imagen"];
$titleShare = $db->Record["titular"];
?>
<!DOCTYPE html>
<html>
<head>
<meta name="twitter:card" content="summary" />
<meta name="twitter:site" content="@loquesea" />
<meta name="twitter:title" content="<?=$titleShare;?>" />
<meta name="twitter:description" content="<?=$titleShare;?>" />
<meta name="twitter:image" content="<?=$imagenShare;?>" />
<meta property="og:image:secure_url" content="<?=$imagenShare;?>">
</head>
<body>
<img src="<?=$imagenShare;?>">
</body>
</html>
<a href="https://www.linkedin.com/sharing/share-offsite/?url=https://www.midominio.com/imagenes/slide20191105125558.jpg">xxx</a>
<a href="https://api.whatsapp.com/send?text=https://www.midominio.com/imagenes/slide20191105125558.jpg">xxx</a>
Linkedin: Obtener todos los datos de un perfil
Primero registrar una nueva APP en la API de Linkedin:
https://developer.linkedin.com
El javascript:
Funciones de PHP:
https://developer.linkedin.com
<?php
define('API_KEY','xxx');
define('API_SECRET','xxx');
define('REDIRECT_URI', $redirectURI); // puede ser localhost
define('SCOPE', 'r_basicprofile r_emailaddress rw_company_admin w_share');
session_name('linkedin');
session_start();
if (isset($_GET['error'])) {
print $_GET['error'] . ': ' . $_GET['error_description'];
exit;
} elseif (isset($_GET['code'])) {
if ($_SESSION['state'] == $_GET['state']) {
getAccessToken();
} else {
exit;
}
} else {
if ((empty($_SESSION['expires_at'])) || (time() > $_SESSION['expires_at'])) {
$_SESSION = array();
}
if (empty($_SESSION['access_token'])) {
getAuthorizationCode();
}
}
$user = fetch('GET', '/v1/people/~:(id,firstName,lastName,skills,educations,pictureUrl,relationToViewer,positions,headline,location,industry,email-address,network)');
?>
El javascript:
<script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.0/jquery.min.js"></script>
<form id="form_reg_linkedin" name="form_reg_linkedin" action="<?=$rutaReg;?>" method="POST">
<input type="hidden" name="nombre_completo" value="<?=$user->firstName;?> <?=$user->lastName;?>">
<input type="hidden" name="email" value="<?=$user->emailAddress;?>">
<?php
require("../../config/cnnAux.php");
$codPais = strtolower($user->location->country->code);
$sql = "select * from paises where cod_pais = '".$codPais."'";
$regPais = $app['db']->fetchAll($sql, array(
));
$id_pais = 0;
if (count($regPais) > 0)
$id_pais = $regPais[0]["id"];
$cp = "";
if ($id_pais == 73) // España
$cp = "28033";
$azar = rand(1,999);
$username = substr($user->firstName, 0,4)."_".substr($user->lastName, 0,4)."_".$azar;
// Generar contraseña aleatoria
$cadena = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz1234567890";
$longitudCadena = strlen($cadena);
$pass = "";
$longitudPW = 10;
for($i=1 ; $i<=$longitudPW ; $i++){
$pos=rand(0,$longitudCadena-1);
$pass .= substr($cadena,$pos,1);
}
$pos1 = strpos($user->location->name, " ");
$ciudad = substr($user->location->name, 0, $pos1);
?>
<input type="hidden" name="esRegLinkedin" value="1">
<input type="hidden" name="id_pais" value="<?=$id_pais?>">
<input type="hidden" name="otra_ciudad" value="<?=$ciudad?>">
<input type="hidden" name="fecha_nacimiento" value="31/12/1977">
<input type="hidden" name="nif" value="2222">
<input type="hidden" name="cp" value="<?=$cp;?>">
<input type="hidden" name="username" value="<?=$username;?>">
<input type="hidden" name="pw1" value="<?=$pass;?>">
</form>
<script>
$(function() {
// alert("Enviar form");
$("#form_reg_linkedin").submit();
});
</script>
Funciones de PHP:
<?php
exit;
function getAuthorizationCode() {
$params = array(
'response_type' => 'code',
'client_id' => API_KEY,
'scope' => SCOPE,
'state' => uniqid('', true), // unique long string
'redirect_uri' => REDIRECT_URI,
);
$url = 'https://www.linkedin.com/uas/oauth2/authorization?' . http_build_query($params);
$_SESSION['state'] = $params['state'];
header("Location: $url");
exit;
}
function getAccessToken() {
$params = array(
'grant_type' => 'authorization_code',
'client_id' => API_KEY,
'client_secret' => API_SECRET,
'code' => $_GET['code'],
'redirect_uri' => REDIRECT_URI,
);
$url = 'https://www.linkedin.com/uas/oauth2/accessToken?' . http_build_query($params);
$context = stream_context_create(
array('http' =>
array('method' => 'POST',
)
)
);
$response = file_get_contents($url, false, $context);
$token = json_decode($response);
$_SESSION['access_token'] = $token->access_token;
$_SESSION['expires_in'] = $token->expires_in;
$_SESSION['expires_at'] = time() + $_SESSION['expires_in'];
return true;
}
function fetch($method, $resource, $body = '') {
// print $_SESSION['access_token'];
$opts = array(
'http'=>array(
'method' => $method,
'header' => "Authorization: Bearer " . $_SESSION['access_token'] . "\r\n" . "x-li-format: json\r\n"
)
);
$url = 'https://api.linkedin.com' . $resource;
// if (count($params)) { $url .= '?' . http_build_query($params); }
$context = stream_context_create($opts);
$response = file_get_contents($url, false, $context);
return json_decode($response);
}
?>
Suscribirse a:
Entradas (Atom)
