2011-12-22 34 views
0

RSSフィードを古いショッピングカートから新しいものに変換しようとしています。新しいカートは入力としてCSVを取ります。私は通常、私はそれを思いつき、それを理解するかもしれないと思っていますが、CSVに入る前にフィードで完了する必要がある追加のタスクがいくつかあります。PHPを使ってRSSをCSVに変換する

まず、ここでhttp://www.bellyscarf.com/rsscategoryproducts.sc?categoryId=6

は、私が実際にRSSからあまりにも多くのデータを必要としない生のフィードですが、ここでは(それぞれから、これらは私の「フィールド」は)私は必要ないものです:

  • タイトル
  • 説明*
  • 価格
  • 販売価格

*説明は私がいくつかの作業が必要なところです。それはhtmlの特殊文字の束と、私が(イメージ参照を含む)削除したいhtmlを持っています。平易な言葉で私が探しているのがプレーンテキストです。

通常、CSVファイルを生成した後にフィールドが追加されますか?私は後でそれらを追加する気にしない。とにかくライブになる前にExcelでCSVを使って作業し、追加のフィールドや情報を追加します。 (わからない、それが何かを助けている場合)あなたがここにその結果を見ることができ

$ch = curl_init('http://bellyscarf.com/rsscategoryproducts.sc?categoryId=6'); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 
curl_setopt($ch, CURLOPT_HEADER, 0); 
$data = curl_exec($ch); 
curl_close($ch); 

$doc = new SimpleXmlElement($data, LIBXML_NOCDATA); 

if(isset($doc->channel)) 
{ 
    parseRSS($doc); 
} else { 
    echo "Not RSS"; 
} 

function parseRSS($xml) 
{ 
    echo "<strong>".$xml->channel->title."</strong>"; 
    $cnt = count($xml->channel->item); 
    for($i=0; $i<$cnt; $i++) 
    { 
     $url = $xml->channel->item[$i]->link; 
     $title = $xml->channel->item[$i]->title; 
     $desc = html_entity_decode($xml->channel->item[$i]->description); 

     echo '<a href="'.$url.'">'.$title.'</a>'.$desc.''; 
    } 
} 

:ここ

は、私はXML/RSSを解析するために書いたいくつかのコードです http://bestsox.com/zumba.php

は、どのように私が生成することができますこのデータを含むCSVファイルですか?

+1

質問は何ですか? – zerkms

+0

上記のフィールド(タイトル、説明、価格、販売価格)をRSSフィードから取得し、CSVファイルにするにはどうすればよいですか? – Alpinestar22

答えて

1

アレックスはすでにあなたがfputcsvの使用は、CSVファイルを作成することができます、しかし、あなたはまだフィードからの読み取り問題を抱えている方法を紹介しました。

まず第一に、あなたはより直接的にチャネル項目を反復処理することができますので、あなたのスクリプトを記述する方が簡単です:

$doc = new SimpleXmlElement($data, LIBXML_NOCDATA); 

foreach($doc->channel->item as $item) 
{ 
    $link = $item->link; 
    $title = $item->title; 
} 

値札を取得するには、別の名前空間の子にアクセスする必要があります。名前空間はRSSファイル内で定義されており、そのURIを知る必要があります。 gd:ため、これは次のとおりです。

http://app.fastshoppingcart.com/rss/featuredProduct/1.0 

あなたは、その後、次の、拡張された例のような価格にアクセスすることができます。

$doc = new SimpleXmlElement($data, LIBXML_NOCDATA); 

foreach($doc->channel->item as $item) 
{ 
    $link = $item->link; 
    $title = $item->title; 

    $gd = $item->children('http://app.fastshoppingcart.com/rss/featuredProduct/1.0'); 
    $price = $gd->price; 
} 

今あなたが説明フィールドからタグを削除したい書きました。これは本当に良いコードではありませんが、これはすぐに仕事をしていません:

$description = strip_tags(html_entity_decode($item->description)); 
$description = str_replace(array("\xA0", "\r", "\n", "\t", "\l", "\f"), ' ', $description); 
$description = preg_replace('/\s{2,}/', ' ', $description); 

それはすべてのタグを削除した後、空白がstr_replacepreg_replaceで正規化されているstrip_tagsを使用しています。

私はこれが役に立ちそうです。

1

fputcsv関数を使用してCSVファイルを書き込むことができます。 次のようにparseRSS機能を置き換えます

function parseRSS($xml) 
{ 
     $fp = fopen('file.csv', 'w'); 
     $header = array('URL','Title','Description'); 
     fputcsv($fp,$header); 
     $cnt = count($xml->channel->item); 
     for($i=0; $i<$cnt; $i++) 
     { 
      $url = $xml->channel->item[$i]->link; 
      $title = $xml->channel->item[$i]->title; 
      $desc = html_entity_decode($xml->channel->item[$i]->description); 
      $fields = array($url, $title, $desc); 
      fputcsv($fp, fields); 
     } 

     fclose($fp); 
} 
+0

RSSから価格と販売価格を得るためのアイデアはありますか?それらがキー/値ペアであるかどうか、またはそれらにアクセスする方法がわからないそれらは記述ブロック()にあります。 – Alpinestar22

+0

ノードに列文字が含まれているため、少し厄介です。 '$ xml-> channel-> item [$ i] - > {gd:salePrice}' – Alex

+0

{gd:salesPrice}のコロンをロケしていないようです違法なキャラクターですか? – Alpinestar22

関連する問題