ccc

Mostrando entradas con la etiqueta API Linkedin. Mostrar todas las entradas
Mostrando entradas con la etiqueta API Linkedin. Mostrar todas las entradas

Compartir url en redes sociales

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)

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:
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

<?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);
}

?>