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

    Seems this shouldn't be a problem. I'd be more concerned if the problem was the other way around (if it didn't work on the production site).

      To be honest it's not really a "production site", I just use the server for backups etc. It's my final year project for my course and I do most of my work on my laptop.

      Would you happen to know where I could find php settings that might have caused a problem?

        I'm not too familiar with SOAP. My thinking was that if it works on the part you get graded on, I'd move on and finish the project then go back and figure it out after the project is over. It looks like the issue is with line 96 of your getdefinitions.php script. Can you post the code for that script?

          The code I have posted up is the getdefinitions.php file.

          This would be the offending piece of code.

          $soapclient = new soapclient($baseurl);

          You don't happen to know if there is a way in php to check if you can access the web.

            You could use exec() and do a ping then output the results to a log file and see if you got a reply from a website. That's the only way I can think of to test Internet access with PHP.

              rsmith wrote:

              You could use exec() and do a ping then output the results to a log file and see if you got a reply from a website. That's the only way I can think of to test Internet access with PHP.

              Gave that a go, pings fine and SOAP still doesn't work... weird.
              Anyone had this issue?

                Write a Reply...