Débuter avec JSON dans Drupal 7

 

Comment pouvez-vous transférer des données entre des sites web ? Il existe de nombreuses options et modules pour Drupal. Vous pouvez utiliser le module Services, RESTful Web Services ou Views Datasource. Cependant, l’utilisation de ces modules peut parfois s’avérer un peu exagérée. Si tout ce que vous voulez faire est d’exposer certaines données via JSON afin qu’elles soient accessibles pour d’autres sites Web, alors il est plus facile de créer un élément de menu personnalisé et de simplement renvoyer les données exposées sous forme de JSON à partir d’un callback de menu.

 

Dans cet article, nous allons examiner l’encodage et le décodage de JSON au sein de Drupal ainsi que la création d’un point de terminaison JSON pour le contenu.

Drupal propose deux fonctions pour encoder et décoder JSON. Pour encoder un tableau en JSON, utilisez drupal_json_encode() et pour décoder un objet JSON en un tableau, utilisez la fonction – devinez ? – la fonction drupal_json_decode().

 

Encodage de JSON

 

D’abord, regardons l’encodage d’un tableau en JSON. Prenons par exemple ce tableau :

$array = array(‘Boat’, ‘Car’, ‘Ship’, ‘Building’);

 

Si nous devions encoder le tableau ci-dessus en JSON, vous obtiendrez [« Bateau », « Voiture », « Navire », « Bâtiment »] retournés. Voici un exemple de code:

$array = array(‘Boat’, ‘Car’, ‘Ship’, ‘Building’) ; $output = drupal_json_encode($array) ; // $output sera [« Boat », « Car », « Ship », « Building »]

Décodage de JSON

 

Voyons maintenant comment décoder un objet JSON. Si vous exécutez le code suivant:

 

$json = ‘[« Bateau », « Voiture », « Navire », « Bâtiment »]’ ; return drupal_json_decode($json) ;

 

La fonction drupal_json_decode() renverra un tableau.

 

Jusqu’à présent, nous avons examiné la fonction drupal_json_encode() et drupal_json_decode() et nous avons vu à quel point elles sont simples à utiliser.

 

Pulling In JSON Objects

 

Le prochain exemple que je veux démontrer est comment tirer un compte Twitter en utilisant l’API REST GET users/show de Twitter.

D’abord, nous aurons besoin de récupérer l’objet JSON et pour cela, nous utiliserons la fonction drupal_http_request():

 

$request = drupal_http_request(‘https://api.twitter.com/1/users/show.json?screen_name=TwitterAPI&include_entities=true’);

 

A l’intérieur de la variable $request, il y aura une propriété de données $request->data. Celle-ci stocke l’objet JSON.

 

La seule chose qui reste à faire est de décoder la propriété data pour avoir accès à toutes les informations.

$request = drupal_http_request(‘https://api.twitter.com/1/users/show.json?screen_name=TwitterAPI&include_entities=true’) ; return drupal_json_decode($request->data)

 

Points de terminaison JSON

 

Le dernier élément que je veux démontrer est comment créer un endpoint JSON pour le contenu d’un site Drupal. Par exemple, si vous naviguez vers exemple.com/node/1/json, le site web sortira une version JSON du contenu. Ceci vous montrera comment sortir une page JSON complète en utilisant la fonction drupal_json_output().

 

NOTE : Si vous voulez créer des points de terminaison JSON ou XML sur un site de production regardez l’utilisation du module Services.

 

1. Tout d’abord, nous devons mettre en œuvre un élément de menu en utilisant le hook_menu. Le chemin de l’élément de menu doit être « node/%node/json ». Pour plus de détails sur la façon d’utiliser hook_menu, consultez la documentation de l’API.

Il faut d’abord implémenter un élément de menu.

function ww_json_example_menu() { $items[‘node/%node/json’] = array( Page callback’ => ; ‘ww_json_example_endpoint’, arguments de la page’ => ; array(1), ‘access arguments’ => ; array(‘access content’), ) ; return $items ; }

 

2. Créez une fonction « page callback » pour l’élément de menu. Assurez-vous également d’ajouter une variable $node à la signature de la fonction. Pour cet exemple, le callback de la page est « ww_json_example_endpoint ». Enfin, nous passons l’objet $node à la fonction drupal_json_output(). Si vous allez dans node/1/json vous devriez juste voir le code JSON sorti.

function ww_json_example_endpoint($node) { drupal_json_output($node) ; }