Re: PHP Data Mining/Data Scraping
| From: | Myron Turner | Date: | Tue, 22 May 2007 22:05:15 +0000 |
| Subject: | Re: PHP Data Mining/Data Scraping | ||
| References: | 1 2 3 4 | Groups: | php.general |
| Request: | Send a blank email to php-general+get-255351@lists.php.net to get a copy of this message | ||
Tijnema wrote:
On 5/22/07, Myron Turner <turnermm02@shaw.ca> wrote:-- _____________________ Myron Turner http://www.room535.org http://www.bstatzero.org http://www.mturner.org/XML_PullParser/On Sat, May 19, 2007 10:22 pm, Shannon Whitty wrote:http://php.net/curlI'm looking for a piece of software or coding that will let me post a form to another URL, accept the response, search it for a specific "success" string and then let me continue processing the rest of my program.It's a nice script, but you're way better off using cURL, you can simply pass a PHP array as POST form data. Tijnema Thanks. That's good to know. My experience with these kinds of things is with Perl, with which I've done an awful lot of screen-scraping. But I haven't had any actual practical experience with cURL. I've looked at it, but that's all. Also, I was under the impression that cURL is an extension which is not always installed, whereas fsockopen() is a built-in. There is one server I sometimes use, a shared server, where it isn't installed. The other servers I use are all independent machines.As I understand this, you want to create a web page of your own which accepts requests for customers who are going to order products from your supplier. You want to have a form on your page which accepts their requests, then forward the form data on to your supplier's web site, where presumably it will be processed. Then you want to retrieve the response from your supplier's page, and display the result on your own web page. You suggest that the response string for "success" is relatively stable and that this string is this what you want to search for in the response. This doesn't sound like a very complicated problem. You can do this either using Ajax or not. The basic solution is the same. You have a script on the server which accepts the form data from your page and re-sends it to the supplier's site. If your supplier's site accepts form data using GET, then you can simply create a url with the form data attached in a query string:I want to accept queries on behalf of my supplier, forward it to them behind the scenes, accept their response and display it within my website. Has anyone had any experience with this? Is there a simple, basic utility to let me do this? I was kind of hoping I could avoid developing it myself.http://my.supplier.com?fdata_1=data1&fdata_2=data2Send this url to your suppler using file_get_contents:$return_string =file_get_contents("http://my.supplier.com?fdata_1=data1&fdata_2=data2"); This will return the html file as a string which you can then parse with preg_match() for the 'success' string. The problem is more involved if your supplier doesn't accept GET but only accepts POST. Then you have to use either curl or fsockopen to post your data. I've tested the following fockopen script and it worked for me: <?php $fp = fsockopen("my.supplier.com", 80, $errno, $errstr, 30); if (!$fp) { echo "$errstr ($errno)<br />\n"; } else { $out = "POST http://my.supplier.com/form_page.html / HTTP/1.1\r\n"; $out .= "Host: my.supplier.com\r\n"; $post = "form_data_1=data_1&formdata_2=data_2"; $len = strlen($post); $post .= "\r\n"; $out .="Content-Length: $len\r\n"; $out .= "Connection: Close\r\n\r\n"; $out .= $post; fwrite($fp, $out); $result= ""; while (!feof($fp)) {$result .= fgets($fp, 128);} fclose($fp); echo $result; } ?> You have to adhere to the above sequence. The posted data comes last and it is preceded by a content-length header which tells the receiving server how long the posted data is. The returned result is the html page returned from your posted request.