Yahooショッピング商品画像をFTPアップロードする 後編

   2015/08/04

前回はYahooショッピングへの商品画像をFTPアップロードするため、

画像の圧縮方法をご紹介しました。

いよいよ、アップロードですが、imgファイルのアップロードファイルの仕様について

おさらいしてみましょう。


http://storedoc.ec.yahoo.co.jp/s/shopping/toolmanual/manage/d/228.html

上記のリンクにあるとおり、

1回にアップロード可能なデータ容量は25メガバイトまでです。


FTPでアップロードする場合のファイル名は

以前も書きましたが、

img.zipとする必要があります。


25メガバイトを超える場合はファイルを分割する必要があります。

ただし、FTPでアップロードする場合、yahooショッピング側に取り込まれるまでに

非常に時間がかかります。

ファイルを分割する場合、一つ目のファイルの取り込みが終わるのを待っている間に

PHPのサーバ側のタイムアウトで処理が終了してしまいます。

ファイル名を変えることが出来れば・・・


ということで、ここで思い出してください。

そう、タイムスタンプです。


実はcsvファイルだけでなく、商品画像のzipファイルにもタイムスタンプつき

ファイル名にすることで、反映予定日時として取り込まれるのです。


 


前置きが長くなりましたが、PHPのコードのご紹介です。

        //各ファイルの数だけアップロード削除処理をする。
        $i = 1;
        for($i=1;$i<=$imgCount; $i++)
        {

            //存在しない場合は次のレコードへ
            if(!is_dir("images/img".$i))
            {
                continue;
            }
            
            //既に存在する場合は削除
            if (file_exists("images/img".$i.".zip"))
            {
                //zipファイル削除
                unlink("images/img".$i.".zip");
            }
            archiveZipDir("images/img".$i, "../img".$i);
            //ファイル名に予約時刻を付与 現在時刻 + 20分後
            $time = 20 + $i;
            $today = date('YmdHi', time() +(60 * $time));
            $remotefile = "img".$today."00.zip";
            $imgDirName = "images/img".$i.".zip";
            $ftpdir = "";
                        
            //ファイルアップロード
            FtpUpload($ftp, $ftpdir, $remotefile, $imgDirName);
                    
            //zipファイル削除
            unlink($imgDirName);
            
            //一時フォルダごと削除
            deleteDir("images/img".$i);
            
            //15秒待つ…
            //sleep(15);
        }

変数$imgCountは画像ディレクトリ数のカウントで、事前に

25メガバイト単位で画像ディレクトリが分割されているものとします。


ディレクトリごとに、前回ご紹介した圧縮の処理を行ってzipファイルを作成します。

その際のファイル名は、タイムスタンプつきとなります。

そしてファイルアップロード後にzipファイルを削除、その後一時ディレクトリごと削除しています。


ディレクトリごと削除する関数deleteDirは下記のコードになります。

function deleteDir($rootPath){
    $strDir = opendir($rootPath);
    while($strFile = readdir($strDir)){
        if($strFile != '.' && $strFile != '..'){  //ディレクトリでない場合のみ
            unlink($rootPath.'/'.$strFile);
        }
    }
    rmdir($rootPath);
}


これでYahooのFTPアップロードはひと段落です。

FTPアップロード以外にもAPIを使った反映方法があるようですが、

こちらはどこかで試してみてからご紹介できればと思います。

  • ブログランキング・にほんブログ村へ
  • FC2ブログランキングへ
  • 人気ブログランキングへ
  • このエントリーをはてなブックマークに追加
  • Pocket
  • LINEで送る