Hi all,
I'm developing a app that needs to calls MSNs live search api using nusoap. However on my laptop the calls don't work but when I upload the php script to my server it's works perfectly. Im using ubuntu, do I need to open ports or modify any php settings.
Here's the code im trying to implement
<?php
/**
* This set of functions queries MSN Search API.
*
* This is a single php page and set of functions that, when given the right
* data will return a set of formatted MSN search results. Requires NuSOAP,
* located at [url]http://sourceforge.net/projects/nusoap/[/url].
* Stick this file into a folder in your server along with NuSOAP
* library and point your browser there for action. Don't forget to get
* an MSN Application ID (see [url]http://search.msn.com/developer[/url])
*
* Read the related blog post here:
* [url]http://www.fiftyfoureleven.com/weblog/web-development/programming-and-scripts/apis/msn-search-api[/url]
*
* @author: Mike Papageorge, [url]http://www.fiftyfoureleven.com/contact[/url]
* @lastUpDate: 14/11/2005
* @license: [url]http://creativecommons.org/licenses/by/2.5/[/url]
* @location: [url]http://www.fiftyfoureleven.com/site/code/msn-search-api-sample.txt[/url]
*/
error_reporting(E_ALL);
// Variables for the search. You need to edit these to use this:
$id = 'my developer key';
$site = '';
$numresults = 30;
$baseurl = 'http://soap.search.msn.com/webservices.asmx'; // MSN API URI
$form = '
<form action="'.$_SERVER['PHP_SELF'].'" method="get">
<label for="p">Search Terms</label>
<input name="p" id="p" type="text" />
<input type="submit" value="search" />
</form>
';
/**
* A little 'controller' to make this sample page work:
*
*/
$xhtml = '';
if(isset($_GET['p']) && $_GET['p'] != '') {
$data = getResultArray($id, $site, $baseurl, $numresults);
$xhtml = $form.formatMSNResultset($data, $numresults);
} else {
// If an empty search was given:
$xhtml = (isset($_GET['p']) && $_GET['p'] == '') ? '<p>Please enter a search term</p>':'';
// Show the form:
$xhtml .= $form;
}
echo $xhtml;
//
//
// Here be functions....
//
//
/**
* Build an array with the parameters we want to use.
*
*/
function setParams($id, $site, $numresults) {
$params = array(
// Details for all of these can be found in the developer's kit,
// in the help file.
'AppID' => $id,
'Query' => "My Query",
'CultureInfo' => 'en-US',
'SafeSearch' => 'Off',
'Requests' => array (
'SourceRequest' => array (
'Source' => 'Web',
'Offset' => 0,
'Count' => $numresults,
'ResultFields' => 'All'
)
)
);
return $params;
}
/**
* This function passes our data to NuSOAP, and
* returns the search results:
*/
function getResultArray($id, $site, $baseurl, $numresults) {
// Get the parameters:
$params = setParams($id, $site, $numresults);
// Include the library:
include_once("nusoap.php");
// Create a instance of the SOAP client object
$soapclient = new soapclient($baseurl);
$data = $soapclient->call("Search", array("Request"=>$params));
return $data;
}
/**
* This function formats our MSN specific array:
*
*/
function formatMSNResultset($data, $numresults) {
// If no results were found:
if($data['Responses']['SourceResponse']['Total'] == '0') {
$results = '<p>There were 0 results found with MSN search. Please try again by typing your search terms into the search box, and then click search.</p>';
return $results;
}
// Now down to business:
$tmp = '';
foreach($data['Responses']['SourceResponse']['Results']['Result'] as $key => $value) {
$tmp .= '<dt><a href="'.$data['Responses']['SourceResponse']['Results']['Result'][$key]['Url'].'">'.$data['Responses']['SourceResponse']['Results']['Result'][$key]['Title'].'[/url]</dt>
';
$r = htmlentities($data['Responses']['SourceResponse']['Results']['Result'][$key]['Description']);
$tmp .= '<dd>'.$r.'</dd>
';
}
$results = '<h1>Viewing '.$numresults.' of '.$data['Responses']['SourceResponse']['Total'].' results found by MSN search.</h1>
<dl>
'.$tmp.'
</dl>';
return $results;
}
?>
Blantently stolen from the internet but this is just a test, I do need to be able to query a search engine and here's the error I get.
Warning: SoapClient::SoapClient(http://soap.search.msn.com/webservices.asmx) [function.SoapClient-SoapClient]: failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found in /var/www/page/survey/getdefinitions.php on line 96
Warning: SoapClient::SoapClient() [function.SoapClient-SoapClient]: I/O warning : failed to load external entity "http://soap.search.msn.com/webservices.asmx" in /var/www/page/survey/getdefinitions.php on line 96
Fatal error: Uncaught SoapFault exception: [WSDL] SOAP-ERROR: Parsing WSDL: Couldn't load from 'http://soap.search.msn.com/webservices.asmx' in /var/www/page/survey/getdefinitions.php:96 Stack trace: #0 /var/www/page/survey/getdefinitions.php(96): SoapClient->SoapClient('http://soap.sea...') #1 /var/www/page/survey/getdefinitions.php(43): getResultArray('2725F7DF7AE0E9A...', '', 'http://soap.sea...', 30) #2 {main} thrown in /var/www/page/survey/getdefinitions.php on line 96
So effectively it doesn't see the Mircosoft live, server. And as I said when I bang the code up to a server it works perfectly. That why I assume it's an issue with php connection to the web.
As you can see I don't need the soap module installed etc, i'm using nusoap.
Thanks again for any light you can shed on the subject.
Dooley