★1000PT質問


PHPについて質問です。

現在データベースへ記入してあるURLへ飛んで、あらかじめ作成した文章などを次々と自動で入力するプログラムを作成したいと考えております。

データの操作はHTML上を考えております。

http://oskuni7.sakura.ne.jp/hatena/question25/question25.htm

このデータ上でプログラムを実行(SUBMITボタンを押す)すると

まずURLで指定した画面へ行って、文章を追加

http://oskuni7.sakura.ne.jp/hatena/question25/gamen1.jpg

その後、SUBMITボタンを押す、

http://oskuni7.sakura.ne.jp/hatena/question25/gamen2.jpg

そして最後にまたSUBMITボタンを押す

http://oskuni7.sakura.ne.jp/hatena/question25/gamen3.jpg

という流れになっているのですが、

これをPHPでするやり方、もしくはをサンプルで型を書いて頂ける方おりましたら、教えて頂きたいです。

出来れば一通りの流れのサンプルを書いて頂いて、それを元に自分でちょっとだけ修正を加える事をしてみたいです。

お手数をおかけしますがよろしくお願いいたします。

回答の条件
  • 1人10回まで
  • 登録:2009/03/27 14:22:16
  • 終了:2009/03/31 02:10:52

ベストアンサー

id:sphire No.4

sphire回答回数115ベストアンサー獲得回数122009/03/28 13:18:51

ポイント100pt

PEAR::HTTP_Client でできるのでは?

リファラーやCookie等も正しく処理可能です。

ただ、画面上確認するというよりは、バッチ処理で裏側で動く感じになるかと思います。

http://pear.php.net/package/HTTP_Client

id:aiomock

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

出力をするとなるとやはり  HTTP_Client::post を使うことになるのでしょうか?

pear を初めて見させて頂きましたが、一番理解できやすそうですのでこれを基に勉強したいと思います。

2009/03/28 22:12:44

その他の回答(3件)

id:fut573 No.1

fut573回答回数195ベストアンサー獲得回数542009/03/27 15:05:05

ポイント23pt

必要な機能の殆どが、cakephpで実現できそうですね。

以下のページに解説動画がありますので、その通りにすれば、10~20分で原型が出来るかと思います。

(大文字小文字、単数形複数形を気をつけないとエラーがでますが)

http://p4life.jp/cake/cake_app.html

id:aiomock

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

cakephpだと作りやすいということですね。

2009/03/28 01:57:57
id:atrem No.2

atrem回答回数4ベストアンサー獲得回数02009/03/27 15:47:16

ポイント23pt

PHPでもできなくはないと思いますが、画面遷移があるとクッキーとかリファラーとか結構面倒くさいです。


一番確実な方法は(というか楽です)、IEに表示されているページのフォームに値を自動入力し、

ボタンとかを自動でクリックし、次々と画面を遷移するプログラムを作ることです。

この場合、httpsとか認証とか関係なくなります。

私は、以前会社で暇なときに.NETを使って作ったことがありますが、

参考までにそのときは、サントリーBOSS電の抽選を行うサイトにIEでアクセスし、

BOSSの抽選シールに書いてあるIDを自動で入力し、抽選まで連続で自動実行するというものを作りました。


余談ですが、その後、そのツールは性能試験で利用し、実務面で大活躍しましたw


.NET開発環境の無償版もありますので。

【コラム】イマドキのIDE事情 (20) 無償で利用可能な.NET統合開発環境 | エンタープライズ | マイコミジャーナル


何かの参考になればと思います。がんばってください。

id:aiomock

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

自動でクリックしていくというのはPHPで言うとどのような仕組みや関数を使うか知っておられますでしょうか?

.NETだと比較的簡単に出来るのでしょうか。

2009/03/28 22:31:32
id:hijk05 No.3

hijk05回答回数1307ベストアンサー獲得回数232009/03/28 09:08:29

ポイント22pt

Yahooオークションの取引処理の定型部分を機械的に処理したいのですね。

こういう目的なら、PHPで実現するのは無理です。

まず、作るよりかはそういうソフトがすでにあるのでそれを使ったほうがよいと思います。

Yahooオークション ツール で検索すれば見つかります。


もし本当に作るとしたら、

クライアントアプリで、IEコンポーネントを使って、Excel/VBAかなにかで作ったほうがよさそうに思えます。

id:aiomock

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

一括で説明文を追加するものは既存のソフトではあるのですが、個別で設定してそれを一括で追加するものがなかったので、作成したいと考えました。

PHPでの実現はやはり無理でしょうか。

2009/03/28 10:27:41
id:sphire No.4

sphire回答回数115ベストアンサー獲得回数122009/03/28 13:18:51ここでベストアンサー

ポイント100pt

PEAR::HTTP_Client でできるのでは?

リファラーやCookie等も正しく処理可能です。

ただ、画面上確認するというよりは、バッチ処理で裏側で動く感じになるかと思います。

http://pear.php.net/package/HTTP_Client

id:aiomock

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

出力をするとなるとやはり  HTTP_Client::post を使うことになるのでしょうか?

pear を初めて見させて頂きましたが、一番理解できやすそうですのでこれを基に勉強したいと思います。

2009/03/28 22:12:44
  • id:apple_pie
    http://oskuni7.sakura.ne.jp/hatena/question25/gamen1.jpg

    このページは今は画像データになっていますが、実際は、HTMLで書かれた中の一部の文章を抜粋すれば良いのですね。

    いちいち、「SUBMITボタンを押す」のではなく、一気に読み込んだ方がプログラムは簡単でしょうね。

    その程度なら出来るでしょう。
  • id:aiomock
    説明不足で申し訳ありません。

    写真はHTML文ではなく画像になっております。(写真はヤフーオークションのIDとPWを入力しないと表示できないページなので画像でしかあらわすことが出来ませんでした。)

    私個人としては、追加説明文を実行することができればどのような方法を取ってもかまわないです。

    やり方を知っておりましたら是非是非よろしくお願いいたします。
  • id:aiomock
    今回無茶苦茶だとは思うのですが、私はこういう流れで出来るのではないかと考えていました。

    1)プログラムの実行ボタンを押す

    2)MYSQLからURLの値と説明文の値を変数に入れる。

    3)リンクバーにURLを入れる関数みたいなものがあり、そこに変数["URL"]を入れてリンク先へ飛ぶ。

    4)ページのHTMLを読み取る。

    5)説明部分を入れるところを指定して、そこに変数["SETUMEI"]を入れる。

    6)SUBMITボタンを押す関数みたいなものがあり、そのSUBMITボタンのname属性を指定すると、自動でボタンを押してくれる。そしてページ移動。

    7)SUBMITボタンを押す関数をもう一回指定して、自動追加説明を終了する。

    8)MYSQLのURLの値と説明文の値がnullの状態になるまで繰り返す。

  • id:aiomock
    3)、4)、5)、6)、7)の部分がかなり妄想の世界の中にあります。

    3)ですと リンクバーを入れるにしてもブラウザはどのブラウザを使うのか等の指定をしないといけないのか?考えてしまいます。

    4)では、ページのHTMLをよみとっても どのように場所を指定するのか?というのがわかりません。場所にポイントを作ってあげてこちらでその場所のポイントポイントの名前をつけてあげることが必要なのではないかと考えています。

    5)説明部分の追加ですが、場所指定はどのようにするのか。がわかりません。

    6)name属性を指定してボタンを押してくれるような、そんな嘘のような関数が存在するのかと疑ってしまいます。

    この流れでは具体的にこういう風にすれば動かせるのでは 

    その考え方は間違えている

    等ありましたら教えてください。

    プログラム初心者で、出来る限りこの流れでプログラムを作成することが出来れば混乱を少なく、
    作成することが出来るのではないかと考えています。

    プログラムを作成するに当たって、大体の流れ等は思い浮かぶのですが、プログラムが本当にわからないです。

    お手数をおかけしてばかりだとは思うのですが、詳しい方おりましたらよろしくお願いいたします。
  • id:kn1967
    php は基本的にサーバー側で動くものです。
    貴殿が求めているものはクライアント側で動くアプリケーションです。

    phpでもクライアント向けアプリケーションを作れなくはないですが
    Windows用のインターフェースを備えたVBやVBAで作るよりも格段に
    敷居の高いものになります(phpの得意分野はWebサービス、VBやVBAは
    Windowsで動くアプリケーション。適材適所にチョイスする能力も必要です。)

    さらに申し上げるならば
    素人が他のサイトを自動的に操作するようなソフトを聞きかじりで作るのもさらに危険です。
    yahooなどに迷惑をかけた場合の責任はどのように取られるおつもりでしょうか?
    単純に退会で済まされれば良いほうだと思いますけど・・・。
  • id:aiomock
    kn1967 さん

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

    WEB上で自動で入出力をしていくソフトは

    今行っている業務でとても重要な部類に入ってきますので

    少しずつでもいいので勉強できればと考えております。

    ヤフー側に迷惑をかけるものであればそのようなソフトを作ることはなるべく避ける。
    もしくは知識をつけてから対応をできるようになりたいと思います。
  • id:aiomock
    WEB上のデータを入出力する上でとても便利で相手側に負担をかけないようなプログラム言語というものはあるのでしょうか?
  • id:aiomock
    今回の様な機能を踏まえたプログラムを組んでもらう、もしくはソフト化してもらうとしたら業界ではいくらぐらいが相場なのでしょうか?
  • id:kn1967
    必要なのは言語ではなく、仕組みに対する理解と
    仕組みを形にするために必要な言語や環境を整えて使えるだけの知識。

    phpやMySQLに関する知識はまだ学習中ですよね?
     → Excelなどであれば比較的使いやすいのではありませんか?
    Webの通信についてはどうですか?
     → 仕組みを自分で作りますか?
     → それともIEなど既存のものを使いますか?

    VBAは一例であって、VBAを推すわけではなく、
    まだまだ未知に近いphpやMySQLを使って1から構築するよりも
    早く学べて作れるようになるものをチョイスしていきませんかという提案です。

    さりとて
    業務の一方でスキルをアップしていくのは相当の時間がかかります。

    最低限の機能だけとしても業者に頼めば数十万円はかかるでしょう。
    (個人で数万円という回答をする者もいるかもしれないが・・・)

    お金をかけて用意してでも、その機能が必要であるのかどうか判りませんが
    近所の方にパートタイムや自宅勤務で一日千円から二千円程度で
    作業代行してもらうほうが自由度高くて、安上がりかもしれませんよ。
    少なくとも、貴殿がhatenaで相談しながら、ネットや本で調べながらという時間は
    十二分に節約できるようになるかと思いますが・・・。
  • id:aiomock
    kn1967 さん

    ご回答ありがとうございます。
    とても勉強になります。

    自動で説明文を追加する様な作業は人がする様な作業ではないと思いますし、
    プログラムに対する興味もどんどん膨らんできておりますので、
    遅くなってもかまいませんので勉強しながら作って行きたいと思います。

    仕組みに対する理解と仕組みを形にするために必要な言語や環境を整えて使えるだけの知識が必要だという事はとても勉強になりました。

    ど素人ですが、今の所一番手になじんでいるのはphpなのでphpで作成していきたいと思います。
    (VBAに関してはいつもはてなの人に書いて頂いているだけで一度も勉強がしたことがなく、未だ理解できていない状況です。)
  • id:aiomock
    PHPで作成できるとの事でしたのでPHPでの作成の仕方を聞きながら勉強したいと思います。

    実際に勉強し実行していく中で

    pear というのが理解し易そうで、行いたいプログラムを実行できるとの事でしたので、pearを使ってみたいと思っています。

    WEBの通信手段ですが

    個人で作成することもできるみたいですが、既存のものを使用したほうが早い気がするのでIEを使って行ってみたいです。

    PHPとPEARとIE この3つを使用していざ作りたい と思ってみたのですが

    全体の流れ、イメージが全く出来ませんでした。

    自分の知識量の問題だとは思うのですが、この3つがどのような仕組みで動いていけば、このプログラムが実行されるのか?

    全体の流れを教えて頂ける方おられないでしょうか。





  • id:Mook
    傍観するつもりでしたが、上記のコメントに対して少しだけ。

    まず、PHPとVBA はそれぞれ主たる使用分野が異なります。VBA はクライアントで動作
    するものですし、PHP は主にサーバサイドで使用されるものです。
    WEB アプリケーションではこの違いが非常に重要です。
    (もっともVBA はブラウザ(IE)をコントロールできますが、WEB 向けのものでは
    ありません。MicroSoft の ASP として使用されているのは VBSです。ややこしいですね。)

    今回の目的に対する解法はいろいろなものはあると思いますが、一般的にはサービス
    提供側の WEB インタフェースを介してそれをコントロールするものだと思いますので、
    それには DOM に対する理解が必要です。
    http://ja.wikipedia.org/wiki/Document_Object_Model

    これを自分でコントロールできるようになるには、少なくとも WEB でのデータの
    やり取りの仕組みを理解する必要があります。

    例えば、下記のような単純なものでも、動的にページを生成し、ページ間
    (同じページですが)でデータを継承しています。
    <?php
    $uraArray = array('楽しい','悪い','嬉しい','つまらない','いい','おかしな');
    $uranai = $uraArray[ rand( 0, count($uraArray) - 1 ) ];
    if( !empty( $_POST['allData'] ) ) {
    $data = $_POST['allData'];
    } else {
    $data = '';
    }
    if( !empty( $_POST['snumber'] ) ) {
    if ( $data != '' ) $data .= '=>';
    $data .= $_POST['snumber'];
    }
    print <<< _HTML
    <html>
    <head>
    <title>TEST</title>
    </head>
    <body bgcolor="#c0ffc0">
    <h1>これまで選んだ番号</h1>
    <div>占い:今日は<font color="red"><b> $uranai</b></font>ことがあるでしょう</div><br><br>
    <form method="post" >
    これまでの結果:<input type="text" name="allData" size="100" value="${data}" ><br>
    今回の番号は?
    <select name="snumber">
    <option value="1">1</option>
    <option value="2">2</option>
    <option value="3">3</option>
    </select>
    <input value="選択実行" type="submit" >
    </form>
    </body>
    </html>
    _HTML;
    ?>

    PHP は確かに強力で便利ですが、WEB に関しては JavaScript も理解された方がよいかと思います。
  • id:kn1967
    流れとしては手作業で行う場合とまったくと言って良いほど同じ。

    (1)php+PEAR
    パソコン側ブラウザ
       question25.htmを開いてsubmitを押した。
           ↓  
    サーバのphpプログラム
       データベースからオークションサイトのアドレス取得 ※1
           ↓
       オークションサイトへアクセスしてページを取得 ※2
           ↓
       IDやパスワードを求められているなら送信
       (必要であれば、クッキー情報などを受け取ったり、
        一時的にサーバ内に貯めたりする必要あり)
           ↓
       オークションサイトへ書き込み(送信)
           ↓
       ※2 1回分が終わるまで繰り返し
           ↓
       ※1 全てが終わるまで繰り返し
           ↓
       全てが終了したという事をパソコンに送信
           ↓
    パソコン側ブラウザ
       終了のページが表示される

    IEを使うという提案はサーバサイドスクリプトを使わない場合の例であって
    上記のように、PHPとPEARという組み合わせであればIEである必要は無く
    question25.htm を開いてsubmit出来るブラウザであれば何でもOK。

    なお、
    このままではサーバが作業を全て終了するまでパソコン側が待たされて
    ブラウザがタイムアウトしてしまう可能性がありますので
    途中途中でパソコン側に対して何らかの返答を行う必要がありますが
    それはまた別の話になりますので割愛。

    (2)ExcelVBA
    パソコン側Excel
       マクロを起動した。
           ↓
       IE起動
           ↓
       question25シートからオークションサイトのアドレス取得 ※1
       (DBではなくシートにアドレスが書いてある事とする)
           ↓
       IEでオークションサイトを開く ※2
           ↓
       IDやパスワードを求められているなら送信
       (クッキー情報などはIEが勝手に処理してくれる)
           ↓
       オークションサイトへ書き込み(送信)
           ↓
       ※2 1回分が終わるまで繰り返し
           ↓
       ※1 全てが終わるまで繰り返し

    ブラウザそのものを使うため
    必要なプログラム行数も数分の1以下で済む。

    以上は非常に簡素に書いたものです。
    実際にはそれぞれ結構難しい部分が出てきます。
  • id:aiomock
    MOOKさん

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

    非常に勉強になりました。

    パソコン上とサーバー上では

    今回の処理を実行する上では大きな差があるということですね。

    クライアント側から動かすには VBS → IE → サイト へ自動出力

    サーバー側(PHPを使用して)から動かすには PHP → サイト出力

    という流れを通るということでしょうか。

    DOMという新しいキーワードを教えて頂きありがとうございます。

    これを理解することで

    自分が置きたいと思ったデータを置きたい場所に置く事ができるようになるわけですね。

    ちょっと調べてみたいと思います。
  • id:aiomock
    kn1967 さん

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

    全体像をお蔭様で把握することが出来ました^^。

    本当にありがとうございます。

    この後MOOKさんのDOMを参考に 未だ疑問点である

    ○URL先に飛ぶこと。
    ○ページの情報を読み取ること
    ○データを自分の置きたい場所に置くこと
    ○自動でボタンを押してページ移動をすること。

    を少し調べてみたいと思います。
  • id:fut573
    ああ!失礼。
    自力でオークションサイトみたいなのを作ってそれを管理したいのだと勘違いしていました。
    他人のサーバーで色々やるならばcakephpは不適ですね。
  • id:kn1967
    phpやVBAなどのプログラムで処理するのであれば

    (1)
    ページの情報を読み取ります。

    (2)
    読み取った情報を解析して
    ・パラメータの名前
    ・送り先
    を抜き出します。

    (3)
    パラメータをセットして送り先に送信します。

    画面遷移を意識する必要はありますが、プログラムで処理するのですから
    ブラウザで見るままの動作とはニュアンスが異なります。
    ブラウザが裏で行ってくれている動作をphpなどで実現する必要があるのです。
    それはつまりブラウザを作るという行為に近いものがあります・・・。

    完成までお付き合いできるはずも無いので、とりあえず、このあたりにしておきます。
    では )/~~~~

    余談
    CakePHP・・・質問文に対しては当然の回答だと思いますよ。
    やりたいことを伝える、何をやりたいのかを想像する・・・
    いずれも難しいですから・・・。
  • id:Mook
    余談ですが、
    CakePHP の紹介ページとても参考になりました。

    PHPのフレームワークは以前から興味を持っていたのですが、紹介ページを見て
    是非遊んでみたくなり、さっそくインストールしてみました。
  • id:aiomock
    皆さん 

    とても的確なアドバイスを頂いて本当にありがとうございます。

    Cakephpは今まで聞いたこともなかった言語でしたのでとても興味が沸きました^^。

    色々知らないことを教えて頂きありがとうございます。

  • id:aiomock
    kn1967 さん

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

    非常に参考になります。

    自分でも調べてみようかと思います。
  • id:aiomock
    今回自分で少し調べてみました。

    今回PEARを使用してのことでしたので、

    ○ページへ移動する。$req= new HTTP_Request("飛びたいリンク先/");

    ○ページの情報を読み取る。 
    ソースデータを参考にするのでは??

    ○データを自分の置きたい場所に置くこと
    $req->addPostData('置き換える場所のname属性', 置き換えたいデータ);

    ○自動でボタンを押してページ移動をすること。
    わからず・・・・

    上記の様なプログラムの関数??等を参考にすることで作成できるのではないかと思いました。

    ○自動でボタンを押してページ移動する。

    このやり方が未だわからないのですがこちらのやり方を知っているかたおりましたら、少しだけ教えて頂けないでしょうか。

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

    また上記のやり方で間違っている点がありましたらご指摘をお願いいたします。
  • id:sphire
    間違っている以前に、やり方がイメージできていないようですね。

    PEARでやる場合に限定して書きます。

    ブラウザで操作する場合には
    「(1)フォーム画面」→「(2)確認画面」→「(3)完了」
    の3画面あるということですよね。
    #多分それ以前にログインとかあるはずですが省略

    このうち、(1)→(2) と、(2)→(3) はPOSTしているものと思われます。
    プログラムで作成するのは2回POSTする部分です。

    (2)のURLにPOSTすると、結果HTML=(2)のHTMLが返ってきます。
    #同時にクッキーを食わされたりするかもしれません

    それらの情報をすべて引き継いで、(3)のURLにPOSTしてあげる必要があります。

    IEが…とか、Submitが…とか書いてる時点で、理解が不足しています。
    ブラウザ操作自動化系のユーティリティ使用の方が敷居が低いと思われますので
    そちらで検討してはいかがでしょうか。
  • id:fut573
    CakePHPは言語ではなく、PHPでwebアプリを作る為のテンプレート(のようなもの)です。
    初心者でも半日頑張れば、そこそこ実用的なwebアプリが出来てしまう、という大変な優れものです。
  • id:aiomock
    sphire さん

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

    自動でボタンを押してページを移動するということはURLの後ろ部分にデータを乗せてあげる様な設定をしてあげるということでしょうか?

    よくショッピングページなどでGET送信をしているものにhttp:yahoo.co.jp/&6537%D 等のように意味不明の文字が書いてあることがありますがあれのPOST版でデータを引き継ぐという事でしょうか??。

    そうなると送るデータをよくわからない文字に変換する方法とページへ移動したらデータを再び文字データへと変換する様な処理。

    送られるデータのURLの後ろのデータをくっつける法則性みたいなものを知る必要があるということでしょうか?

    もう少し自分でも調べてみたいと思います。
  • id:aiomock
    fut573 さん

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

    アプリケーションを作る際にとても使えるプログラムなのですね。

    機会があれば是非使ってみようかと思います。

    とても勉強になります。

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

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

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

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