質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
CSV

CSV(Comma-Separated Values)はコンマで区切られた明白なテキスト値のリストです。もしくは、そのフォーマットでひとつ以上のリストを含むファイルを指します。

cURL

cURLはHTTP, FTPやTelnetなど複数のプロトコルを用いてデータを転送するライブラリとコマンドラインツールを提供します。

WordPress

WordPressは、PHPで開発されているオープンソースのブログソフトウェアです。データベース管理システムにはMySQLを用いています。フリーのブログソフトウェアの中では最も人気が高く、PHPとHTMLを使って簡単にテンプレートをカスタマイズすることができます。

シェル

シェル(shell)はUnix や Linux 系のOSで使用されるコマンドインタプリタを指します。

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

Q&A

解決済

1回答

2177閲覧

WordPress管理画面からダウンロードできるCSVファイルをcurlを使って自動保存したい

akira_kano1101

総合スコア25

CSV

CSV(Comma-Separated Values)はコンマで区切られた明白なテキスト値のリストです。もしくは、そのフォーマットでひとつ以上のリストを含むファイルを指します。

cURL

cURLはHTTP, FTPやTelnetなど複数のプロトコルを用いてデータを転送するライブラリとコマンドラインツールを提供します。

WordPress

WordPressは、PHPで開発されているオープンソースのブログソフトウェアです。データベース管理システムにはMySQLを用いています。フリーのブログソフトウェアの中では最も人気が高く、PHPとHTMLを使って簡単にテンプレートをカスタマイズすることができます。

シェル

シェル(shell)はUnix や Linux 系のOSで使用されるコマンドインタプリタを指します。

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

0グッド

0クリップ

投稿2020/09/24 13:16

編集2020/09/25 03:21

現状の問題

シェルスクリプトでcurlを使いCSVファイルのダウンロードを試みているのですがうまくいきません。

具体的には、XserverにインストールしたWordPressにWelcartというプラグインを入れており、商品マスターのCSVファイルをシェルスクリプトを使うなりしてコマンドだけでダウンロードしたいです。

ブラウザ上ならGUIの操作でダウンロードはできるのですが、シェルスクリプトだけでダウンロードできたら便利だろうと思いいろいろ試しているのですがなかなかできなくて悩んでいます。

期待すること

最終的にはこのシェルスクリプトをXserverのcronを使い定期的に呼び出し、CSVファイルをサーバーに自動でダウンロードできるようにしたいです。

ダウンロードするデータの保存先はXserverの任意のディレクトリの予定です。

ダウンロード後は同じシェルスクリプトから予め組んでおいたRubyを呼び出すなりしてこのCSVファイルを整形して出力し、それを使いたいと思っています。

試したこと

まずはローカルでcurlによるダウンロードを成功させたくて作業しております。

現状ターミナルからSSHでサーバーにログインして作業しております。

シェルスクリプトの内容↓

% curl -c cookie.txt --data "log=(ユーザー名)&pwd=(パスワード)" https://(ドメイン名)/wp-login.php % curl -b cookie.txt -v -L -O -J --globoff "https://(ドメイン名)/wp-admin/admin.php?page=usces_itemedit&action=dlitemlist&noheader=true&search[column]=none&search[word][none]=undefined&searchSwitchStatus=undefined&ftype=csv&mode=all&chk_header=on"

これを実行すると
・中身のないサイズ1バイトのファイルusces_item_list.csvが生成されます。(これが正しくダウンロードできていないので問題です)
・そして以下のような答えが表示されます。

% Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed 0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0* About to connect() to (ドメイン名) port 443 (#0) * Trying 183.181.85.89... * Connected to (ドメイン名) (183.181.85.89) port 443 (#0) * Initializing NSS with certpath: sql:/etc/pki/nssdb * CAfile: /etc/pki/tls/certs/ca-bundle.crt CApath: none * SSL connection using TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 * Server certificate: * subject: CN=www.(ドメイン名) * start date: 8月 27 21:09:31 2020 GMT * expire date: 11月 25 21:09:31 2020 GMT * common name: www.(ドメイン名) * issuer: CN=Let's Encrypt Authority X3,O=Let's Encrypt,C=US > GET /wp-admin/admin.php?page=usces_itemedit&action=dlitemlist&noheader=true&search[column]=none&search[word][none]=undefined&searchSwitchStatus=undefined&ftype=csv&mode=all&chk_header=on HTTP/1.1 > User-Agent: curl/7.29.0 > Host: (ドメイン名) > Accept: */* > Cookie: (省略) > < HTTP/1.1 200 OK < Server: nginx < Date: Fri, 25 Sep 2020 02:54:12 GMT < Content-Type: application/octet-stream < Transfer-Encoding: chunked < Connection: keep-alive < Pragma: no-cache < Expires: Wed, 11 Jan 1984 05:00:00 GMT < Cache-Control: no-cache, must-revalidate, max-age=0 < X-Frame-Options: SAMEORIGIN < Referrer-Policy: strict-origin-when-cross-origin < Content-Disposition: attachment; filename=usces_item_list.csv < { [data not shown] 100 1 0 1 0 0 4 0 --:--:-- --:--:-- --:--:-- 4 * Connection #0 to host (ドメイン名) left intact curl: Saved to filename 'usces_item_list.csv'

usces_item_list.csvに、商品マスターのCSVデータが入ってくれれば成功です。

しかし、それがうまくいきません。サイズが1バイトになっていて中身がないんです。

このうち以下の部分を参考にし、
> GET /wp-admin/admin.php?page=usces_itemedit&action=dlitemlist&noheader=true&search[column]=none&search[word][none]=undefined&searchSwitchStatus=undefined&ftype=csv&mode=all&chk_header=on
以下のURLを手作業でこしらえ、手元ローカルのブラウザでWordPressにログインした状態でこのURLにアクセスすると、これならダウンロードできるのです。

Firefoxならダウンロードか開くかのダイアログが出ます。Chromeならダイアログは出ずにダウンロードされます。

https://(ドメイン名)/wp-admin/admin.php?page=usces_itemedit&action=dlitemlist&noheader=true&search[column]=none&search[word][none]=undefined&searchSwitchStatus=undefined&ftype=csv&mode=all&chk_header=on

CSVをシェルスクリプトでダウンロードしたいというだけなのですが…

ローカルであれサーバー上であれ、curlなどでCSVファイルのダウンロードが自動でできれば問題ないので、その方法を知りたいです。

どなたか分かる方がいらっしゃればご教示いただけると幸いです。

よろしくお願いいたします。

手元の環境

macOS catalina 10.15.6

サーバー

Xserver

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2020/09/24 13:41

まぁ色々疑問があるがサーバー上でデータを生成してサーバー上に保存するだけじやないのか?
akira_kano1101

2020/09/24 13:54

ご助言ありがとうございます。 現状、curlを使っての試みはローカルですら上手くいっていないので、サーバー以前にそれが問題なのです。 手元のブラウザでならローカルへダウンロードできたので、ローカルでcurlもうまくいきそうなものですが…
guest

回答1

0

ベストアンサー

How To Export Posts To CSV In WordPress
https://artisansweb.net/export-posts-csv-wordpress/

リンク先の内容は

管理画面の投稿一覧に投稿の中身を書き出したCSVをダウンロードできるボタンを追加する

というものだが、こういうのを参考にすれば良い。

PHPで実行させればcurlでアクセスさせてどうこうと考えなくて良い。
必要なのはActual Code for Exporting Posts to CSV以下のコード。
get_postsのパラメータにmeta_key=>'_itemName'を追加することでWelcartで扱う投稿を取得できるはず。
後は必要な情報をget_post_meta等で取得しCSVに書き出すようにすれば良い。
尚cronで実行するならadd_action( 'init', 'func_export_all_posts' );は不要。
別途PHPのファイルを作ってcronでfunc_export_all_posts()を実行させるかコードそのものを実行させれば良い。
必要な情報だけ取得するようにすれば後から整形する必要も無い。

投稿2020/09/25 16:08

退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

akira_kano1101

2020/09/26 05:01

なるほど、PHPでなら簡単にできるのですね! 私はPHPは今までほとんど触らずきているので、こういうやり方があるのかと初めて知りとても参考になります。 今回のことでPHPにも興味がわいたので、今後勉強していきたいと思います。 わかりやすく解説いただき、ありがとうございました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問