現状の問題
シェルスクリプトで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
回答1件
あなたの回答
tips
プレビュー