web-dev-qa-db-fra.com

Drupal 7 - Comment analyser les données JSON d'un site Web et les importer en tant que nœuds et les mettre à jour toutes les heures?

J'ai drupal 7 avec les Feeds et FeedsJSONParser module installé, mais je n'arrive pas à comprendre comment le configurer pour analyser les flux.

Je souhaite analyser les flux suivants dans leurs propres nœuds: https://poloniex.com/public?command=returnTicker

{
    "BTC_LTC": {
        "last": "0.0237",
        "lowestAsk": "0.02383797",
        "highestBid": "0.0237",
        "percentChange": "0.00642712",
        "baseVolume": "5.69603109",
        "quoteVolume": "240.78778654",
        "isFrozen": "0"
    },
    "BTC_NXT": {
        "last": "0.00007000",
        "lowestAsk": "0.00007350",
        "highestBid": "0.00007000",
        "percentChange": "-0.06542056",
        "baseVolume": "0.84850609",
        "quoteVolume": "12014",
        "isFrozen": "0"
    },
    "BTC_NMC": {
        "last": "0.00403",
        "lowestAsk": "0.00489",
        "highestBid": "0.00404001",
        "percentChange": "-0.04952830",
        "baseVolume": "0.27214383",
        "quoteVolume": "64.24716761",
        "isFrozen": "0"
    }
}

J'ai les paramètres suivants pour le JSONparser, mais ne semble rien faire. Quelqu'un aurait-il la gentillesse de prendre un instantané de cette configuration?

enter image description here

enter image description here

6

J'ai trouvé ce site avec un tutoriel au cas où quelqu'un d'autre serait intéressé par la façon de configurer l'importation:

Le didacticiel importe les flux via jsonpath

1
chalo

Je pense que vous avez un problème avec le "contexte" et la requête de titre. J'ai essayé cette configuration et j'ai travaillé pour moi.

Le contexte est la première requête et dans ce cas sélectionne juste tous les nœuds, le second prend la valeur de la clé "last" et la met sur le titre du nœud.

Ensuite, vous pouvez jouer avec d'autres requêtes, pour créer les nœuds, mais au moins celui-ci fonctionne.

enter image description here

5
angoru

Pourquoi ne pas simplement le faire sur mesure? Voici un exemple pour vous aider à démarrer. Configurez votre cron sur le serveur pour qu'il s'exécute toutes les heures. Cela nécessite une API d'entité

/** implements hook_cron **/
function poloniex_cron(){
 poloniex_get_feed();
}

function poloniex_get_feed(){
 //Get the feed and turn it into json
 $feed = file_get_contents("https://poloniex.com/public?command=returnTicker");
 $feed_json = json_decode($feed);

 foreach($feed_json as $item){
  poloniex_create_node($item);
 }
}

/**$item should be an array from the json feed**/
function poloniex_create_node($item){
  //Create an instance of the node and wrap it
  $node = entity_create('node', array('type' => 'content_type'));
  $node_wrapper = entity_metadata_wrapper('node',$node);

  //Set properties
  $node_wrapper->author = 1; // Admin as the author
  $node_wrapper->title->set("String");  //Title
  $node_wrapper->field_name->set("String"); //Textfield
  $node_wrapper->save();
}
4
chadpeppers

Le problème est que le JSON n'est pas structuré de manière à effectuer un mappage facile vers un nœud. Si le disque ressemblait plus à:

"record": {"name": "BTC_LTC", "last": "0.0237", etc }

... ce serait beaucoup plus facile. Vous pouvez ensuite utiliser la réponse d'Angoru et simplement analyser $.name pour une valeur comme BTC_LTC et mettez-la dans le titre.

L'autre problème est qu'au moment où vous apprenez suffisamment de JPath pour extraire un enregistrement individuel et son nom, vous auriez pu écrire votre propre analyseur de flux. :-)

J'ai récemment dû faire quelque chose de similaire et j'ai utilisé Feeds: Meetup comme modèle.

0
paul-m