PHPについて質問です。


前回ページにHTTP_CLIENTを使用して

ログインをし、ページの情報からデータを抜き取る方法の参考になるページを教えていただきました。

http://itpro.nikkeibp.co.jp/article/COLUMN/20070507/270079/

実際に参考にして実行しました。

結果として出来ませんでした。

POSTの設定がうまくいかないため、スクリプトを実行すると

指定したオークションIDは無効です。

というエラーメッセージが表示されたページのデータを受け取る状況に今なっているからです。

詳しい方で、POST付近のコードを見ていただき、問題点あればご指摘をいただければと考えております。

お手数をおかけしますが、わかるかたおりましたらご回答をお待ちしております。

回答の条件
  • 1人2回まで
  • 登録:2009/11/30 04:40:39
  • 終了:2009/11/30 18:39:46

ベストアンサー

id:HALSPECIAL No.1

HALSPECIAL回答回数407ベストアンサー獲得回数862009/11/30 09:58:27

ポイント100pt

ヤフオクのログインでつまずいているということでしょうか?

ログインの部分について公の場で指南していいものかどうか躊躇しますが・・・

まずパッと見たところ、POSTしている項目がIDとパスワードだけですよね。

これだけでは不足だと思います。

画面から目に見える部分では、IDとパスワードの項目しかないからこの2つを送ろうと思ったのだと思いますが、

実際に送られる項目はこれ以外にもたくさんあります。

全部必要かどうかはわかりませんが・・・

まずはリクエストヘッダを捕捉して実際に何が送られているか確認してみてください。


以下、蛇足

本件の質問でどのようなアプリを作成し、どのように利用されるかは知りませんが、

自動出品とか自動落札とかのアプリでしたら、どうしてサーバーサイドのアプリケーション(PHP等)

で構築されようとしているのか理解できません。

(クライアントサイドのアプリで十分なのではないかと)

以前からずいぶんと四苦八苦されているようですので、

VBAからIEを操作するような形でログイン→何かの処理をさせるようにしたほうが簡単ですよ。

こらならプログラムでIDとパスワードをセットしてボタンを押すだけじゃないでしょうか?

三流君VBAでIE操作 InternetExplorer.Applicationを操作する

id:aiomock

ご回答ありがとうございます。

PHPしか勉強したことがないため、ほかの言語でやることについて躊躇しておりました。

やりたいことですが落札後のやりとりで、

自分が作った型の文章にお客様の情報を入力していただき、その型にそった情報を返信してもらったら、自動巡回でお客様の情報を取得するということをしたいです。

例)郵便番号:111-1111 

  名前:ああああああ

郵便番号: と 名前: の間にある文字を自動取得する。

このようなことをするには VBA という言語がぴったりなのでしょうか?

エクセルでデータをまとめられるので、とても便利そうなので是非やってみたいのですが・・

2009/11/30 11:55:39
  • id:aiomock
    コードになります。


    <?

    //DBへ接続

    mysql_connect("mysqafeafap","osafea7","gafeauu");

    mysql_query("SET NAMES SJIS");

    mysql_select_db("osaefi7");

    //抽出するオークションID

    $sql=mysql_query("select * from AUCTION_ID_INFO");


    while ($row = mysql_fetch_array($sql, MYSQL_ASSOC)) {


    $auction_id = $row["AUCTION_ID"];


    //ログイン処理 


    //ログイン
    $login_url="https://login.yahoo.co.jp/config/login?.src=auc&.intl=jp&.pd=&.partner=&.protoctl=&.done=http%3A//auctions.yahoo.co.jp/jp";


    //IDとPWを設定

    $yahoo_id="oafeame";
    $password="tn1afe66";


    require_once "HTTP/Client.php";

    $login_params = array( "yahoo_id" => $yahoo_id,
    "password" => $password);



    //ログイン後飛びたいURL

    $url="http://page4.auctions.yahoo.co.jp/jp/show/contact_detail?aID=".$auction_id."&target=papi98&no=3&.crumb=lJayA3WNrSZ" ;


    $client =& new HTTP_Client();
    $client->post($login_url, $login_params);
    $client->get($url);



    //HTMLを読み込む

    $html = $client->currentResponse();

    echo $html['body'];

    //データ抽出 


    preg_match('|<small>投稿者:(.*?)</small>|',$html['body'], $matches);
    $yahoo_id = $matches[1] ;



    mysql_query("UPDATE AUCTION_ID_INFO SET AUCTION_ID = '".$yahoo_id."'");


    }


    ?>
  • id:aiomock
    見ていただきたいPOST設定付近のコードになります。(上のコードから自分なりに絞ってみました。。)


    //ログイン
    $login_url="https://login.yahoo.co.jp/config/login?.src=auc&.intl=jp&.pd=&.partner=&.protoctl=&.done=http%3A//auctions.yahoo.co.jp/jp";


    //IDとPWを設定

    $yahoo_id="oafeame";
    $password="tn1afe66";


    require_once "HTTP/Client.php";

    $login_params = array( "yahoo_id" => $yahoo_id,
    "password" => $password);



    //ログイン後飛びたいURL

    $url="http://page4.auctions.yahoo.co.jp/jp/show/contact_detail?aID=".$auction_id."&target=papi98&no=3&.crumb=lJayA3WNrSZ" ;


    $client =& new HTTP_Client();
    $client->post($login_url, $login_params);
    $client->get($url);



    //HTMLを読み込む

    $html = $client->currentResponse();

    echo $html['body'];

  • id:HALSPECIAL
    HALSPECIAL 2009/11/30 12:47:39
    >PHPしか勉強したことがないため、ほかの言語でやることについて躊躇しておりました。
    >このようなことをするには VBA という言語がぴったりなのでしょうか?
    ぴったりと言うわけではありませんが、WEBアプリでなく、デスクトップで動作するアプリで
    作るのが普通かと。
    言語なんて何でも良いのかもしれませんが、IEを直接操作するのにVBAが手軽で
    便利だと思います。

    >エクセルでデータをまとめられるので、とても便利そうなので是非やってみたいのですが・・
    是非やってみてください。
    三流君の回し者ではありませんが、こちらのサイトがいいと思いますよ。
    http://www.ken3.org/
    何と動画解説付きですよ。
    一昨日、
    ご本人様の肉声入りの解説だと言うことに気がつきました。
  • id:aiomock
    とても丁寧にご回答ありがとうございます。

    チャレンジしてみたいと思います^^。

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません