忍者ブログ

Wordpressメモとかアフィめもとか

Wordpress,PHP,アフィリエイトとかの個人メモを記録していくよ

[PR]

×

[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。

電脳卸 まるごとCSV仕様メモ

古い記事しか見つからなかったけど今もコレなのかな。。。
http://blog.d-064.com/dws/

●ファイルの生成は、以下のルールで作成されます。
・商品フルデータ(現在登録されているすべてのデータ)
・差分データ(前日登録や・情報変更・商品削除の情報)

●生成スケジュール
それぞれのファイルの生成に関しては、
・フルデータの生成→毎週月曜日
・差分データ→毎日
生成は午前3:00ごろに生成開始します。
現行ではおよそ15分ですべてのデータ生成は完了していますが
今後の商品の増加により、生成終了までの時間が変わることもあります。

ファイルは、ログインを行った後、
すべての商品データはall/ディレクトリ
差分データはdiff/ディレクトリ

にそれぞれ格納されています。
ファイル名は
フルデータ→csv_all_(日付).zip
差分データ→csv_diff_(日付).zip

※初めて扱いになられる場合はフルデータを取得し、それ以降のデータは
差分データにて対応していただければ効率よくデータを利用いただけると
思います。


データ項目は下記の通り。桁数は。。。。。。。。。



フィールド名 出力の型 詳細
商品ID int 商品識別を行うIDです。 123456
ショップID int 卸会員IDになります ○○ショップ
ショップ名 text 卸会員名になります ○○ショップ
商品名 text 商品の名前 iPod30GB
メーカー名 text 商品のメーカーブランド名 Apple
キャッチコピー text 1行コピー 世界で一番売れている音楽プレーヤーです!!
商品詳細 text 商品の仕様・詳細 HDD:30GB.....
商品コメント text 卸会員が入力した商品のコメント これはなかなかの掘り出し物です......
価格 int 商品価格 19800
税込み?税抜き? 0/1 0:税込み 1:税抜き 0
配送間隔 text 配送するまでの間隔 注文後1週間でお届けします
在庫フラグ 0/1 在庫の有無を表示 0:在庫なし 1:在庫あり 0
リンクURL text ストアミックスへのリンク(HIDは各自で入力) http://www.store-mix.com/ko-bai/product.php?oid=30&pid=123456&hid=
商品写真小(サムネイル)URL text 商品写真表示のURL http://image.store-mix.com/include/implession.php?........
商品写真中(サムネイル)URL text 商品写真表示のURL http://image.store-mix.com/include/implession.php?........
商品写真大(サムネイル)URL text 商品写真表示のURL http://image.store-mix.com/include/implession.php?........
商品写真1URL text 商品写真表示のURL http://image.store-mix.com/include/implession.php?........
商品写真2URL text 商品写真表示のURL http://image.store-mix.com/include/implession.php?........
商品写真3URL text 商品写真表示のURL http://image.store-mix.com/include/implession.php?........
商品ジャンル1 text 商品ジャンル第1階層  
商品ジャンル2 text 商品ジャンル第2階層  
商品ジャンル3 text 商品ジャンル第3階層  
商品ジャンル4 text 商品ジャンル第4階層  
商品ジャンル5 text 商品ジャンル第5階層  
商品ジャンル6 text 商品ジャンル第6階層  
商品ジャンル7 text 商品ジャンル第7階層  
更新フラグ int 商品更新・削除フラグ 1:新規登録 2:データ更新 3:データ削除 1


ちなみに文字コードはSJISだった。。

拍手[0回]

PR

電脳卸を使ってみる事にした

アフィリエイトサイトをいくつか作っているけど、その定型の条件で重要なのはAPIまたはRSS等である程度データが取得できる事。
そうでないと、自動化が非常に面倒くさいので。。。

そういう意味では電脳卸はAPIが提供されている、また、全データをFTPで取れると言う事もあり使ってみる事にした。
だけど、電脳卸は良くも悪くも癖のある商品が多いので、リンクシェアなんかと同居させると、リンクシェアの審査ではじかれそうな予感がしないでもないので、別サイトにする事に。

少し触った幹事では電脳卸で提供されているAPIは非常にだめだめっぽいので困ったもんだ。。。
扱う商材も癖があり、万人が成果を挙げるのは難しそうな感じだなぁ。
際物特化サイト作る予定だけど。。

また、このAPIが駄目っぽい。。。実用に耐えられるのかした。。。
なので、全権データ取得して自力でやる方向で考える。

それと電脳卸のFTPは1セッションしか駄目みたい。

拍手[0回]

phpでWarning: Invalid argument supplied for foreach()がでる

Warning: Invalid argument supplied for foreach()の警告。

simplexml_load_file()関数を使って結果をforeachでループさせる時に良く出る。
理由はforeachに配列じゃない変数を与えているから。

simplexml_load_file()関数を使ってAPIからの戻りをパースするときforeachの多重ループで処理をする事が多いのだけど、APIからの戻りの配列が多次元になっていてそれを良く見ないでforeachに突っ込んでるから。

$arr = array(
  0 => array(1,2,3),
  1=> '4'
  2=>array(5,6,7,8,9)
);


この$arrをforeachの2重ループでまわすと$arr[1]が配列じゃないので警告が出る。
なのでforeachで回す前にis_array()関数を使って配列のときだけforeachするようにする。











拍手[0回]

php simplexml_load_fileでrssのxml取得

xmlを配列にしたいときにsimplexml_load_fileを使う。
以下、Yahooニュース・トピックス国内のRSSを取得するサンプル
<?php
  $rss_uri = 'http://rss.dailynews.yahoo.co.jp/fc/domestic/rss.xml';
  $xml = simplexml_load_file($rss_uri); 
  var_dump($xml);
?>


実行結果

object(SimpleXMLElement)#1 (2) {
  ["@attributes"]=>
  array(1) {
    ["version"]=>
    string(3) "2.0"
  }
  ["channel"]=>
  object(SimpleXMLElement)#2 (6) {
    ["title"]=>
    string(45) "Yahoo!ニュース・トピックス - 国内"
    ["link"]=>
    string(41) "http://dailynews.yahoo.co.jp/fc/domestic/"
    ["description"]=>
    string(114) "Yahoo! JAPANのニュース・トピックスで取り上げている最新の見出しを提供しています。"
    ["language"]=>
    string(2) "ja"
    ["pubDate"]=>
    string(31) "Sun, 21 Oct 2012 12:39:43 +0900"
    ["item"]=>
    array(8) {
      [0]=>
      object(SimpleXMLElement)#3 (5) {
        ["title"]=>
        string(37) "米司令官 沖縄訪問し謝罪へ"
        ["link"]=>
        string(109) "http://rd.yahoo.co.jp/rss/l/topics/topics/*http://dailynews.yahoo.co.jp/fc/domestic/us_armed_forces_in_japan/"
        ["pubDate"]=>
        string(31) "Sun, 21 Oct 2012 11:30:13 +0900"
        ["enclosure"]=>
        object(SimpleXMLElement)#11 (1) {
          ["@attributes"]=>
          array(3) {
            ["length"]=>
            string(3) "133"
            ["url"]=>
            string(38) "http://i.yimg.jp/images/icon/photo.gif"
            ["type"]=>
            string(9) "image/gif"
          }
        }
        ["guid"]=>
        string(25) "yahoo/news/topics/6071592"
      }
      [1]=>
      object(SimpleXMLElement)#4 (4) {
        ["title"]=>
        string(39) "前原氏、解散時期は「年内」"
        ["link"]=>
        string(97) "http://rd.yahoo.co.jp/rss/l/topics/topics/*http://dailynews.yahoo.co.jp/fc/domestic/noda_cabinet/"
        ["pubDate"]=>
        string(31) "Sun, 21 Oct 2012 12:35:44 +0900"
        ["guid"]=>
        string(25) "yahoo/news/topics/6071596"
      }
      [2]=>
      object(SimpleXMLElement)#5 (4) {
        ["title"]=>
        string(38) "岡田氏 3党で予算骨格協議を"
        ["link"]=>
        string(99) "http://rd.yahoo.co.jp/rss/l/topics/topics/*http://dailynews.yahoo.co.jp/fc/domestic/budgeting_2013/"
        ["pubDate"]=>
        string(31) "Sat, 20 Oct 2012 23:30:32 +0900"
        ["guid"]=>
        string(25) "yahoo/news/topics/6071551"
      }
      [3]=>
      object(SimpleXMLElement)#6 (4) {
        ["title"]=>
        string(38) "国の財源枯渇の可能性 なぜ?"
        ["link"]=>
        string(99) "http://rd.yahoo.co.jp/rss/l/topics/topics/*http://dailynews.yahoo.co.jp/fc/domestic/budgeting_2012/"
        ["pubDate"]=>
        string(31) "Sat, 20 Oct 2012 18:08:26 +0900"
        ["guid"]=>
        string(25) "yahoo/news/topics/6071534"
      }
      [4]=>
      object(SimpleXMLElement)#7 (4) {
        ["title"]=>
        string(40) "誤認逮捕 書き込みの疑問放置"
        ["link"]=>
        string(105) "http://rd.yahoo.co.jp/rss/l/topics/topics/*http://dailynews.yahoo.co.jp/fc/domestic/remote_control_virus/"
        ["pubDate"]=>
        string(31) "Sun, 21 Oct 2012 08:20:38 +0900"
        ["guid"]=>
        string(25) "yahoo/news/topics/6071573"
      }
      [5]=>
      object(SimpleXMLElement)#8 (4) {
        ["title"]=>
        string(36) "臨時国会 11月末までで調整"
        ["link"]=>
        string(91) "http://rd.yahoo.co.jp/rss/l/topics/topics/*http://dailynews.yahoo.co.jp/fc/domestic/kokkai/"
        ["pubDate"]=>
        string(31) "Sat, 20 Oct 2012 20:12:26 +0900"
        ["guid"]=>
        string(25) "yahoo/news/topics/6071541"
      }
      [6]=>
      object(SimpleXMLElement)#9 (5) {
        ["title"]=>
        string(40) "仕事中のけが 健康保険適用へ"
        ["link"]=>
        string(109) "http://rd.yahoo.co.jp/rss/l/topics/topics/*http://dailynews.yahoo.co.jp/fc/domestic/medical_treatment_system/"
        ["pubDate"]=>
        string(31) "Sat, 20 Oct 2012 15:46:53 +0900"
        ["enclosure"]=>
        object(SimpleXMLElement)#12 (1) {
          ["@attributes"]=>
          array(3) {
            ["length"]=>
            string(3) "133"
            ["url"]=>
            string(38) "http://i.yimg.jp/images/icon/photo.gif"
            ["type"]=>
            string(9) "image/gif"
          }
        }
        ["guid"]=>
        string(25) "yahoo/news/topics/6071521"
      }
      [7]=>
      object(SimpleXMLElement)#10 (5) {
        ["title"]=>
        string(40) "北日本・新潟 雨と突風に注意"
        ["link"]=>
        string(92) "http://rd.yahoo.co.jp/rss/l/topics/topics/*http://dailynews.yahoo.co.jp/fc/domestic/weather/"
        ["pubDate"]=>
        string(31) "Sat, 20 Oct 2012 20:50:02 +0900"
        ["enclosure"]=>
        object(SimpleXMLElement)#13 (1) {
          ["@attributes"]=>
          array(3) {
            ["length"]=>
            string(3) "133"
            ["url"]=>
            string(38) "http://i.yimg.jp/images/icon/photo.gif"
            ["type"]=>
            string(9) "image/gif"
          }
        }
        ["guid"]=>
        string(25) "yahoo/news/topics/6071543"
      }
    }
  }
}
 

タイトルのリンク作る

<?php
  $rss_uri = 'http://rss.dailynews.yahoo.co.jp/fc/domestic/rss.xml';
  $xml = simplexml_load_file($rss_uri);
  #var_dump($xml);
 
  foreach ( $xml->channel as $channel_val ){
    foreach ( $channel_val->item as $item_val ){
      echo '<a href="'.$item_val->link.'" title="'.$item_val->title.'">'.$item_val->title.'</a><br />';
    }
  }
 
?>

格納された配列にアクセスするのはforeach で配列ループをまわして->で階層をたどる。

実行結果
<a href="http://rd.yahoo.co.jp/rss/l/topics/topics/*http://dailynews.yahoo.co.jp/fc/domestic/us_armed_forces_in_japan/" title="米司令官 沖縄訪問し謝罪へ">米司令官 沖縄訪問し謝罪へ</a><br />
<a href="http://rd.yahoo.co.jp/rss/l/topics/topics/*http://dailynews.yahoo.co.jp/fc/domestic/noda_cabinet/" title="前原氏、解散時期は「年内」">前原氏、解散時期は「年内」</a><br />
<a href="http://rd.yahoo.co.jp/rss/l/topics/topics/*http://dailynews.yahoo.co.jp/fc/domestic/budgeting_2013/" title="岡田氏 3党で予算骨格協議を">岡田氏 3党で予算骨格協議を</a><br />
<a href="http://rd.yahoo.co.jp/rss/l/topics/topics/*http://dailynews.yahoo.co.jp/fc/domestic/budgeting_2012/" title="国の財源枯渇の可能性 なぜ?">国の財源枯渇の可能性 なぜ?</a><br />
<a href="http://rd.yahoo.co.jp/rss/l/topics/topics/*http://dailynews.yahoo.co.jp/fc/domestic/remote_control_virus/" title="誤認逮捕 書き込みの疑問放置">誤認逮捕 書き込みの疑問放置</a><br />
<a href="http://rd.yahoo.co.jp/rss/l/topics/topics/*http://dailynews.yahoo.co.jp/fc/domestic/kokkai/" title="臨時国会 11月末までで調整">臨時国会 11月末までで調整</a><br />
<a href="http://rd.yahoo.co.jp/rss/l/topics/topics/*http://dailynews.yahoo.co.jp/fc/domestic/medical_treatment_system/" title="仕事中のけが 健康保険適用へ">仕事中のけが 健康保険適用へ</a><br />
<a href="http://rd.yahoo.co.jp/rss/l/topics/topics/*http://dailynews.yahoo.co.jp/fc/domestic/weather/" title="北日本・新潟 雨と突風に注意">北日本・新潟 雨と突風に注意</a><br />
 
ブラウザで見るとこんな感じ。

米司令官 沖縄訪問し謝罪へ
前原氏、解散時期は「年内」
岡田氏 3党で予算骨格協議を
国の財源枯渇の可能性 なぜ?
誤認逮捕 書き込みの疑問放置
臨時国会 11月末までで調整
仕事中のけが 健康保険適用へ
北日本・新潟 雨と突風に注意


simple_xmlは便利だね。

拍手[0回]

lolipop の cronとか

lolipopでSSHログインし、perlなどのスクリプト実行時に負荷が高いと?プロセスがkillされる。

たとえば、ファイル100万件を読んで吐き出すだけのスクリプトとか。

で、このkillされる条件が良くわからないので色々やってみた。

case1
単純に100万件くらいを呼んで出す。

while(my $line = <IN>){

  ...
途中でkillされる

case2
case1のwhileループの中にselect(4引数のほうね)を使ってsleepさせながら実行。
時間によるけど成功する。sleepだと1秒未満が指定できないので、selectつかった

while(my $line = <IN>){
  select(undef, undef, undef, 0.000005);
  ...

成功


ただし、これをcronから実行させると共に失敗する。
失敗するのは開始からきっかり5分。

おそらく、cronから実行されるジョブは負荷に関係なく経過時間でkillされている。

case3
以下のスクリプトを手動で実行。
[test.pl]
#!/usr/bin/perl
use strict;
use warnings;
my $i;

print "start";
for($i = 0; $i < 361; $i++ ){
  sleep(1);
  if( ( $i % 30 ) == 0){
    # 30秒ごとにログ出す
    outlog($i); # yyyy/mm/dd hh24:mi:ss filename msgのフォーマットでログ出してる自作関数
  }
print "end";
}exit;
実行結果
2012/10/19 20:07:19 : # test.pl start
2012/10/19 20:07:20 : # test.pl 0
2012/10/19 20:07:50 : # test.pl 30
2012/10/19 20:08:20 : # test.pl 60
2012/10/19 20:08:50 : # test.pl 90
2012/10/19 20:09:20 : # test.pl 120
2012/10/19 20:09:50 : # test.pl 150
2012/10/19 20:10:20 : # test.pl 180
2012/10/19 20:10:50 : # test.pl 210
2012/10/19 20:11:20 : # test.pl 240
2012/10/19 20:11:50 : # test.pl 270
2012/10/19 20:12:20 : # test.pl 300
2012/10/19 20:12:50 : # test.pl 330
2012/10/19 20:13:20 : # test.pl 360
2012/10/19 20:13:20 : # test.pl end

→成功

ところが、上記の[test.pl]をlolipopのcronから実行すると

2012/10/19 20:17:01 : # test.pl start
2012/10/19 20:17:02 : # test.pl 0
2012/10/19 20:17:32 : # test.pl 30
2012/10/19 20:18:02 : # test.pl 60
2012/10/19 20:18:32 : # test.pl 90
2012/10/19 20:19:02 : # test.pl 120
2012/10/19 20:19:32 : # test.pl 150
2012/10/19 20:20:02 : # test.pl 180
2012/10/19 20:20:32 : # test.pl 210
2012/10/19 20:21:02 : # test.pl 240
2012/10/19 20:21:33 : # test.pl 270
2012/10/19 20:22:03 : # test.pl 300
5分後のログが最後になってる。
 
まとめ?
  • スクリプト手動実行時は負荷が高いものはその時点でkillされる
  • cronから実行すると、負荷に係らず開始から5分でkillされる

バッチプログラム作りにくいね。。。
cronから実行されるスクリプトからさらに子プロセスを呼び出して、親は終了するのならいけるんだろうか。。。

拍手[0回]

ブログ内検索

最新コメント

広告

プロフィール

なんとなくはじめてみたよ

忍者ツールズプロフィールは終了しました

カウンター