Utilisez Google avec vos photos comme page d’accueil

Comme beaucoup, vous avez surement un fond d’écran avec votre photo préférée (conjoint, enfant, chat…), mais avouez que vous ne la changez pas très souvent. Si elle pouvait se mettre automatiquement à jour toute seule avec les photos prises depuis votre téléphone, ça serait quand plus sympa. Ici, on ne va pas aborder le fond d’écran, mais votre moteur de recherche préféré. Car si vous êtes comme moi, vous naviguez plus sur Google, que sur votre bureau.

Je me suis penché récemment sur l’api de Google Photo, et je me suis dit si seulement quand j’ouvre un nouvel onglet, je pouvais avoir une image aléatoirement prise depuis mon téléphone qui s’affiche, ça serait vraiment cool. C’est un peu comme si à chaque recherche, ça me rappelait un souvenir sympa (naissance, visite au zoo, anniversaire…). J’ai donc développé ce concept, il se trouve ici:

https://google.gameandme.fr

Pour commencer, vous devez relier le site à votre compte Google Photo, et après, il vous suffit de définir cette page comme page d’accueil de votre navigateur. Bien sur pour que ça fonctionne au mieux, il faut avoir une synchronisation de votre téléphone avec Google Photos (histoire que ça puisse s’actualiser tout seul). L’actualisation des données a lieu une fois par mois, alors si ça rame un peu, ne paniquez pas. Après, ça ira tout seul 🙂

Pour avoir un nouvel onglet sous Chrome avec cette page, je vous invite à installer le plugin suivant. Pensez à bien cocher, la case « Always update tab, not redirect. (Enable for cursor in the address bar) ».

Dites-moi si vous aimez cette page dans les commentaires.

La suite pour les développeurs en herbe:

Et pour ceux qui veulent aller plus loin dans le développement. Je suis parti de ce projet Github. Voici quelques informations sur la manière de rafraîchir un token oAuth2 Google. Lorsque vous déclarez votre clé oAuth dans Google Cloud Platform, vous pouvez instancier un client oAuth comme ceci:

$oauth2 = new OAuth2([
'clientId' => $clientId (issue du json),
'clientSecret' => $clientSecret (issue du json),
'authorizationUri' => 'https://accounts.google.com/o/oauth2/v2/auth',
// Where to return the user to if they accept your request to access their account.
// You must authorize this URI in the Google API Console.
'redirectUri' => $redirectURI (votre fichier php pour le retour de connexion),
'tokenCredentialUri' => 'https://www.googleapis.com/oauth2/v4/token',
'scope' => $scopes (le scope de votre application avec les droits demandés),
'access_type' => 'offline',
'prompt'=>'consent'
]);

Lors de la 1er connexion, il vous faut donc faire cette manipulation pour récupérer un code d’accès:

$authenticationUrl = $oauth2->buildFullAuthorizationUri(['access_type' => 'offline', 'prompt'=>'consent']);
header("Location: " . $authenticationUrl);

Ensuite, si vous avez ce code, vous avez aussi un refresh token qui va arriver 🙂

if (isset($_GET["code"])){
   $oauth2->setCode($_GET["code"]); 
   $authToken = $oauth2->fetchAuthToken();
   $refreshToken = $authToken['access_token']; 
   $expires_in = $authToken['expires_in']; 
   // The UserRefreshCredentials will use the refresh token to 'refresh' the credentials when 
  // they expire. 
  $_SESSION['credentials'] = new UserRefreshCredentials( $scopes, [ 'client_id' =>$clientId, 'client_secret' =>$clientSecret, 'refresh_token' =>$refreshToken ] ); setcookie('auth_token', serialize($authToken), time() + 365243600, null, null, false, true); 
}

Vous avez maintenant les credentials en session (mais celle ci expire dans une heure), et si vous ne voulez pas redemandez les droits à votre visiteur, vous devez faire comme ceci (merci le cookie):

$tab = unserialize($_COOKIE["auth_token"]);
$oauth2->setAccessToken($tab["access_token"]);
$oauth2->setRefreshToken($tab["refresh_token"]);

$authToken = $oauth2->fetchAuthToken();

$refreshToken = $authToken['access_token'];
$expires_in = $authToken['expires_in'];

// The UserRefreshCredentials will use the refresh token to 'refresh' the credentials when
// they expire.
$_SESSION['credentials'] = new UserRefreshCredentials(
$scopes,
[
'client_id' =>$clientId,
'client_secret' =>$clientSecret,
'refresh_token' =>$refreshToken
]
);
setcookie('auth_token', serialize($authToken), time() + 365<em>24</em>3600, null, null, false, true);

Quand on lit ça, ça semble simple, mais je vous assure qu’on peut facilement perdre des jours à lire de la doc Google sans avancer, et en cumulant les token expired, et autres erreurs liées à l’authentification.

A noter que Google n’autorise à avoir un écran certifié que si vous êtes une société (même en ayant des conditions générales dignes d’un avocat, ca ne leur suffit pas), donc ne vous étonnez pas d’avoir un avertissement sur ma page de test.

Les sources sont disponibles ici:
https://github.com/ynizon/my_google_homepage

Laisser un commentaire

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.