- ベストアンサー
スクリプト動作に関する問題と解決方法
- 公開されているスクリプトを動かそうとして500エラーが発生しています。
- perlのモジュールが不足しているため、JcodeとXML::Simpleをインストールしましたが問題は解決しませんでした。
- スクリプトの書き方が理解できず、一からスクリプトを書くことも難しい状況です。助言やヒントをいただけるとありがたいです。
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
実行して確認したわけではないですが、気になる点がいくつか。 500エラーということはどこかのホームページに置いてCGIとして実行したということでしょうか? 「3時間ほど結果が帰ってこないのでご注意を。」とありますので、CGIとして実行するには不向きだと思います。 それとスクリプト中の「[YOUR_developerID]」はそのまま使ってはいけません。 楽天ウェブサービス http://webservice.rakuten.co.jp/ から、デベロッパーIDを取得してそのIDに書き換えてください。 あとは1行目「#!/usr/bin/perl -w」の /usr/bin/perl のパスは正しいですか? どこまで実行できているか確認するために、自分で任意の場所にprint文でメッセージを出せるくらいの最低限の知識は必要と思います。
その他の回答 (4)
- yuoke
- ベストアンサー率53% (8/15)
No.4の補足です 今の私の環境がスマートフォンで、 参照先のプログラムの$apiの中身が、 「~devel」までしか確認出来なかったので、 間違えてるかも知れませんが、さらにその先の楽天のページの 書き方を確認したところIDの後に「&operation」が 必要な気がしますが、参照先には、その記述が有りませんか?
お礼
回答有難うございます。 operationはGenreSearchを指定してあります。 xmlは正しく取得できているようなので、後はスクリプトの使い方だけだと思うのですが、よくわかりません。 perlの専門書はまったく読んだことがなくて、作りたいものを作成する時にだけ必要な機能についてwebで少しずつ勉強しているだけの知識しかありません。 せめて、基本が書かれている専門書を読破して、書かれているコードの意味をある程度理解出来る知識がないと難しいみたいですね。
補足
同様の形式でデーターを取得する自作で作成していたスクリプトを見直していたところ、 ループのところに問題があったようで、少し修正したら、正常に取得できるようになりました。 なので、配布されているスクリプトが必要なくなりました。 勉強の為にも、動かせるようになった方がよいので、こちらのスクリプトももう少し試行錯誤してみようと思います。 みなさま、どうも有難うございました。
- yuoke
- ベストアンサー率53% (8/15)
$apiで指定した文字列の直後に「0」を追加したurlを ブラウザで見てみて下さい。 そこでxmlが表示されれば、コマンドから実行すれば、 正しく表示されると思われます。 xmlが表示されなければ、$apiの書き方に問題がありますので、 必要な文字が抜けてないか確認して下さい。 正しく動くようになれば、結果は標準出力に出るので、 適当なファイルにリダイレクトしてやれば、望み通りの結果になると思います。
- ralf124c
- ベストアンサー率52% (232/446)
別にファイルへ出力しなくても実行過程での変数を表示するようにすればいいと思います。 まず、どこまで正常に実行できているのかを把握するには print "Trap 番号\n"; 場所によって場号を変えて実行されている順番を見る 変数の中身を確認する print $変数名."\n"; などをでたらめでなくこの辺はどうだろうと当たりをつけて入れてみたらどうでしょう。 まずは地道にトライしてみてください。
お礼
有難うございます。 ループに入る前の23行目まではprintで表示されるのですが、ループに入る23行目以降にprintを入れると何も表示されなくなります。コマンドでも次の$が表示されているので、処理待ち状態にもなっていない?ようなのですが、基本的な知識もあまりないため、基本的なところでミスしているかも知れません。 地道にトライしてみてもどうしても駄目なようでしたら、 自分で作成中のスクリプトを完成させてみようと思います。約80%以上のところまでは完成していると思いますが、 そこら辺から行き詰って、頭の中がゴチャゴチャになって諦めました。これも基本的なところで間違えているような気もするので見直してみます。
- ralf124c
- ベストアンサー率52% (232/446)
そもそもHTTPヘッダの出力部が見当たらないのでコマンドラインで実行しなければいけないのでは。 ループでprintしている手前に「print "Content-type: text/plain\n\n";」とか入れておけばNo.1さんが指摘しているWebサーバのタイムアウトと楽天IDの問題をクリアすればいけなくはないかも。 でもコマンドラインが前提なのでは?
お礼
有難うございます。ブラウザで実行させて、ファイルに書き出せればと思っていたのですが、コマンドラインで実行させる用のスクリプトだったのですね。コマンドラインでperlを実行させたことがないので、勉強して挑戦してみます。
補足
コマンドラインでperlを実行してみました。 #!/usr/bin/perl use strict; use warnings; print "Hello, world!\n"; 上の実行結果は表示できました。 ただ、質問のスクリプトの場合は実行結果が出ずに、瞬時に次の$が表示されてしまいます。 $ パールのパス $ このスクリプトを起動した場合は、apacheのログ等に実行結果がプリントされるようになっているのでしょうか?出来れば、ファイルに実行結果を書き込むための改造方法をお教えいただければと思います。申し訳ないですが、よろしくお願いいたします。
お礼
回答ありがとうございます。 申し訳ありません、そのままコピーしたというのは間違いでした。 $apiの部分を以下のように変更してありました。 http://api.rakuten.co.jp/rws/3.0/rest?developerId=自分で取得したディベロッパーID=GenreSearch&version=2007-04-11&genrePath=0&genreId= 基本的には、コマンドラインで実行するためのスクリプトだったのですね。 コマンドラインはほとんど使ったことがないので、勉強してから実行してみようと思います。 このスクリプトが書いていることの意味がほとんどわからないので、 どこを変更すれば、実行結果を任意の場所にprint出来るかさえもわかりません。 それくらいの知識もないので、自分には難しいスクリプトだったみたいです。 勉強してみます。有難うございました。