Tutoriel API My Business

Bonjour à tous,
Aujourd’hui, on va analyser l’api Google My Business et voir comment, on peut générer des posts automatiques avec des jolies photos.
Pour rappel, My Business , c’est ce qui vous permet de vous placer sur des résultats de recherche dans la partie droite avec vos horaires d’ouvertures, votre site internet, et même vos emplacements géographiques. Si vous êtes un restaurateur, un hôtel, ou n’importe quel autre service, foncez vous ouvrir une fiche,c ‘est très simple et ça peut vous rapporter gros (surtout si vos concurrents ne l’ont pas encore fait). Ce service est super utilisé sur mobile, et permet à vos clients de vous géolocaliser ultra facilement.

Pour démarrer, vous avez besoin d’un compte My Business avec au moins un établissement valide (Google doit vous envoyer un courrier pour valider une adresse, ça prend 3 jours).
Vous avez également besoin de la librairie MyBusiness PHP en version v4 qui se trouve ici, et d’activer MyBusiness dans votre Google Cloud console.
N’oubliez pas de rajouter également dans la console, l’adresse de votre site dans l’authentification oAuth 2 si vous ne voulez pas avoir d’erreurs (partie Identifiants > ID Clients oAuth 2.0 > Application Web > URI de redirection autorisés).
Je crois que mon compte API a éta validé par Google, aussi j’ai peut être plus de droits que vous (l’avantage d’être en agence), donc si vous avez des difficultés, consultez cette FAQ et contactez Google.

Franchement la documentation de My Business est très succincte, les champs obligatoires ne sont pas toujours renseignés et les dépendances avec les MediaItem très mal expliqué (et je ne parle pas des messages d’erreurs qui vous disent juste : invalid argument). Bref, ayant pas mal galéré, j’espère vous éviter tout ça.

Personnellement, j’ai utilisé le magnifique framework Laravel pour accéder à l’api, et composer avec la dépendance google/apiclient.
Mais ça doit fonctionner dans n’importe quel framework, et surement même avec un simple fichier PHP et un autoload.

Une fois que vous avez votre fichier MyBusiness.php, vous devez l’ajouter au répertoire vendor\google\apiclient-services\src\Google\Service

Ensuite, vous allez créer un controller avec cette fonction.
Ici, on déclare un client Google avec les informations d’identifications que l’on possède dans sa Cloud Console (moi, je les ai ajoutés dans mon fichier de config/app.php).

Vous avez la 1er partie qui est dédiée à la création d’une photo.
Vous avez la 2e partie qui est dédiée à la création d’un post.

//Ici vous devez implémenter votre authentification oAuth et declarer votre client MyBusiness
$service= new \Google_Service_MyBusiness($client);

//Ensuite vous recuperer votre compte ($account), puis vous chercher l etablissement ($location) dans les listes

//Recuperation des comptes
$nexttoken = "";
do{
	$param = array();
	if ($nexttoken != ""){
		$param = array("pageToken"=>$nexttoken);
	}
	$accountsTmp = $accounts->listAccounts($param)->getAccounts();

	foreach ($accountsTmp as $account){
		$accountsList[$account->name] = $account;
	}
	$nexttoken = $accounts->listAccounts($param)->getNextPageToken();
}while ($nexttoken!="");

$locations = $service->accounts_locations;

$posts = $service->accounts_locations_localPosts;
$photos = $service->accounts_locations_photos;
$medias = $service->accounts_locations_media;
		
//Utiliser la boucle avec le $nexttoken si vous avez plus de 100 enregistrements

//Recup des Medias
//$allmedias = $medias->listAccountsLocationsMedia($location->name)->getMediaItems();
//Recup des posts
//$allposts = $posts->listAccountsLocationsLocalPosts($location->name)->getLocalPosts();

//Recuperation des etablissements
foreach ($accountsList as $accounttmp){
	if ($accounttmp->name == $account_id){
		$nexttoken = "";
		do{
			$param = array();
			if ($nexttoken != ""){
				$param = array("pageToken"=>$nexttoken);
			}
			$locationsTmp = $locations->listAccountsLocations($accounttmp->name,$param)->getLocations();

			foreach ($locationsTmp as $location){
				$locationsList[$location->name] = $location;
			}
			$nexttoken = $locations->listAccountsLocations($accounttmp->name,$param)->getNextPageToken();
		}while ($nexttoken!="");
	}
}			
			

//1er partie: Ajout d'une image

//En commentaire si on fait de l upload (ici on ajoute une url)

//$testRequest = new \Google_Service_MyBusiness_StartUploadMediaItemDataRequest();
//$uploadResults = $service->accounts_locations_media->startUpload($location->name, $testRequest);
$mediaItem = new \Google_Service_MyBusiness_MediaItem();
//$mediaItem->setDataRef($uploadResults);
$mediaItem->setSourceUrl($request->get('url_picture'));
$mediaItem->setMediaFormat('PHOTO');
								
//Si on ajoute juste l'image, on doit ajouter ces lignes (mais nous on la lit au post, donc l image se rajoute a la creation du post)
//$locationAssociation = new \Google_Service_MyBusiness_LocationAssociation();
//$locationAssociation->setCategory('EXTERIOR'); 
//$mediaItem->setLocationAssociation($locationAssociation);
//$results = $service->accounts_locations_media->create($location->name, $mediaItem);

//2e partie: Ajout du post
$oPost = new \Google_Service_MyBusiness_LocalPost();
$oPost->setlanguageCode("fr");
$oPost->setSummary($request->get("comment"));
$oPost->setMedia($mediaItem);
								
								
//Detection du CTC
if ($request->get("ctc") != ""){
	$oCtc = new \Google_Service_MyBusiness_CallToAction();
        $oCtc->setActionType($request->get("ctc"));
	$oCtc->setUrl($request->get("url_ctc"));
	$oPost->setCallToAction($oCtc);
}								
								
//Creation du post
$result = $posts->create($location->name,$oPost);

Soit vous créer simplement une photo, et dans ce cas là, vous devez faire la liaison avec le $locationAssociation; soit vous créer le post avec une image, et dans ce cas là, c’est la ligne create à la toute fin qui fera elle même l’association.

Voici les résultats sous forme d’images pour vous montrer que cela fonctionne bien.

Et sinon, petite questions si vous êtes un développeur bossant chez Google. Vous avez un département stagiaire pour pondre aussi peu d’exemples pour l’API My Business et aussi peu de fonctions pour l’API de la Search Console ? Quand on compare à Analytics, Adwords, et les autres… c’est vraiment le jour et la nuit !

 

EDIT:

Attention, en testant mon outil sur des grands comptes, je me rends compte que les établissements possèdent parfois un champ qui se nomme isLocalPostApiDisabled. Et quand on regarde la documentation, on se rend compte que lorsque vous avez plus de 10 établissements, Google peut décider de vous ajouter ce champ, afin de vous bloquer l’automatisation des posts. Donc cet outil est à réserver pour les petits comptes. D’ailleurs en voyant cette limite, ça me donne pas mal envie de jouer aux spams de liens façon Blackhat SEO, car si Google pose une limite, c’est qu’il a peur de quelque chose…

 

4 réflexions au sujet de “Tutoriel API My Business”

  1. Dommage, tutoriel incomplet, rien ne me dit comment faire pour créer le client Google, et la documentation Google indique qu’il faut spécifier un scope que je ne retrouve pas. Du coup, que faire ?

    Répondre
    • Il faut lire un peu la doc Google et avoir l’habitude de l’api Google pour savoir, mais en gros ca donne ca:
      $client = new \Google_Client();
      $client->setSubject(« Validation »);
      $client->setApplicationName(« API Project »);
      $client->addScope(« https://www.googleapis.com/auth/plus.business.manage »);
      $client->setClientId(config(« app.MYBUSINESS_GOOGLE_CLIENT_ID »));
      $client->setClientSecret(config(« app.MYBUSINESS_GOOGLE_CLIENT_SECRET »));
      $client->setRedirectUri(config(« app.url »). »/mybusiness »);
      $client->setApprovalPrompt(‘force’);
      $client->setAccessType(« offline »);

      Répondre

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.