web-dev-qa-db-ja.com

フィードを使用してプログラムでノードを作成する

Feedsモジュール(素晴らしいモジュールBTW)を使用してXMLからノードを作成しています。

function boardgamegeek_menu() {
  $items['games/add/%/%'] = array(
    'title' => 'Boardgamegeek add game',
    'description' => 'Boardgamegeek add game',
    'page arguments' => array(2, 3),
    'page callback' => 'boardgamegeek_add',
    'access arguments' => array('access content'),
    'type' => MENU_NORMAL_ITEM,
  );
  return $items;
}

function boardgamegeek_add($objectid, $title) {
  $node = new stdClass();
  $node->type = 'boardgame';
  $node->title = $title;
  $node->feeds['FeedsHTTPFetcher']['source'] = 'http://www.boardgamegeek.com/xmlapi/boardgame/' . $objectid;
  node_save($node);
  /*
  // This does an import
  $myFeed = feeds_source('game_importer');
  while (FEEDS_BATCH_COMPLETE != $myFeed->import());
  */
  return 'http://www.boardgamegeek.com/xmlapi/boardgame/' . $objectid;
}

このコードを実行すると、$ titleのタイトルフィールド値を使用してノードが作成されます(これがまさに私が欲しいものです)。インポートは自動的に開始されません。自分でインポートを開始すると、タイトルのない別のノードが作成されています。

作成したノードを更新したい...

enter image description here feed_nidとentity_idは同じである必要があります。 feed_nidは作成したノードのノードID、エンティティIDは作成したノードIDフィードです。

何か案は?

4

私が理解している説明から、手動で設定したタイトル以外のフィードからのすべてのコンテンツを使用してノードを作成しようとしていることがわかります。

HTTP Fetcherを使用して「boardgame」タイプのノードを作成するときに実行されるフィードを作成しました。

この場合のフィードの動作は、添付されたフィードでノードを作成するときです。フィード自体のノードを作成し、フィードのコンテンツを含む追加のノードも作成します。つまり、フィードは実際には、フィードを実行するノードを更新するためのものではなく、フィード自体から追加のノードを作成するためのものです。そして、私はあなたのセットアップで何の問題もなく起こっていると思います。

あなたがやりたいことを達成するには、次のモジュールをインストールできます

Feeds Self Parser

フィード自体から作成されるノードを更新し、代わりに別のノードを作成しないためにこれが行うこと.

注:モジュールが機能しない場合は、キャッシュをクリアする必要があります。そうしないと、エラーが発生する可能性がありますFeedsMissingPlugin_feeds_form in drupal_retrieve_form ()

この方法では、モジュールを作成する必要はなく、タイトルが入力されたURLを含むノードを作成するだけです。ただし、モジュールの作成に他の理由がある場合は、それでも問題ありません。

2番目のオプションは、フィードモジュール自体を使用しないことです。手動でxmlを解析し、必要なフィールドを追加して、node_save()関数を呼び出すだけです。これは、ノードを作成した後、URLを呼び出すだけで自動的に実行されるフィードスクリプトを実行する必要がないことを意味します。また、フィードモジュールを使用するオーバーヘッドも解消されます。

4