web-dev-qa-db-ja.com

Drupal 7-WebサイトからのJSONデータを解析してノードとしてインポートし、1時間ごとに更新するにはどうすればよいですか?

drupal 7 withFeedsandFeedsJSONParserモジュールがインストールされていますが、これをフィードを解析するように構成する方法がわかりません。

次のフィードを独自のノードに解析したい: 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"
    }
}

JSONparserの設定は次のとおりですが、何も実行しないようです。誰かがセットアップのスナップショットを撮るのに十分親切でしょうか?

enter image description here

enter image description here

6

他の誰かがインポートの設定方法に興味がある場合に備えて、チュートリアルでこのサイトを見つけました:

jsonpathを使用したチュートリアルのインポートフィード

1
chalo

「コンテキスト」とタイトルのクエリに問題があると思います。私はこの構成を試し、私のために働いた。

コンテキストは最初のクエリで、この場合はすべてのノードを選択します。2番目のクエリはキーの値を取得し、「最後の」キーをノードのタイトルに付けます。

次に、他のクエリを試してノードを作成できますが、少なくともこれは機能します。

enter image description here

5
angoru

なぜそれをカスタムしないのですか?ここにあなたが始めるための例があります。サーバーでcronを1時間ごとに実行するように設定します。これにはエンティティAPIが必要です

/** 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

問題は、JSONがノードに簡単にマッピングできるように構造化されていないことです。レコードがより似ていた場合:

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

...はるかに簡単になります。その後、angoruの回答を使用して、$.name BTC_LTCのような値の場合、タイトルにそれを入れます。

もう1つの問題は、個々のレコードとその名前を抽出するのに十分なJPathを習得するまでに、独自のFeedsパーサーを作成できたことです。 :-)

私は最近同様のことをしなければならず、テンプレートとして Feeds:Meetup を使用しました。

0
paul-m