2012-12-01 3 views
0

Я пишу, чтобы прочитать xml с сайта wbsite.PHP XML-данные процесса

$jtype = $job_type == 1 ? 'fulltime' : $job_type == 2 ? 'parttime' : $job_type == 3 ? 'contract':''; 
    $xml ="http://api.indeed.com/ads/apisearch?"; 
    $xml .="publisher=9628233567417007"; 
    $xml .="&q=".$q; //Query. By default terms are ANDed. To see what is possible, use our advanced search page to perform a search and then check the url for the q value. 
    $xml .="&l=".$location; //Location. Use a postal code or a "city, state/province/region" combination. 
    $xml .="&sort="; //Sort by relevance or date. Default is relevance. 
    $xml .="&radius=30"; //Distance from search location ("as the crow flies"). Default is 25. 
    $xml .="&st=employer"; //Site type. To show only jobs from job boards use 'jobsite'. For jobs from direct employer websites use 'employer'. 
    $xml .="&jt=".$jtype ; //Job type. Allowed values: "fulltime", "parttime", "contract", "internship", "temporary". 
    $xml .="&start=0"; //Start results at this result number, beginning with 0. Default is 0. 
    $xml .="&limit=10"; //Maximum number of results returned per query. Default is 10 
    $xml .="&fromage=".$within; //Number of days back to search. 
    $xml .="&filter=1"; //Filter duplicate results. 0 turns off duplicate job filtering. Default is 1. 
    $xml .="&latlong=1"; //If latlong=1, returns latitude and longitude information for each job result. Default is 0. 
    $xml .="&co=GB";//arch within country specified. Default is us. See below for a complete list of supported countries. 
    $xml .="&v=2"; 

    $xmlData = new SimpleXMLElement($xml, null, true); 
    $xmls = $xmlData->xpath('results/result'); 

    $jIndeed = array(); 
    $iIndeed=1; 
    if(!empty($xmls)) 
    { 
     foreach ($xmls as $xml) 
     { 
      $created_at = strftime(dateFormat ,strtotime((string)$xml->date)); 
      $jIndeed[$iIndeed]['job_id']   = (string)$xml->jobkey; 
      $jIndeed[$iIndeed]['jobTitle']   = cleanText((string)$xml->jobtitle); 
      $jIndeed[$iIndeed]['var_name']   = seoUrl((string)$xml->jobtitle); 
      $jIndeed[$iIndeed]['jobDescription'] = (string)$xml->snippet; 
      $jIndeed[$iIndeed]['created_at']  = $created_at; 
      $jIndeed[$iIndeed]['job_type']   = (string)$xml->typeName; 
      $jIndeed[$iIndeed]['companyName']  = (string)$xml->company; 
      $jIndeed[$iIndeed]['location']   = (string)$xml->formattedLocation; 
      $iIndeed++; 
     } 
     $smarty->assign('searchIndeed', $jIndeed); 
    } 

Когда я бегу это на локальной машине, она работает нормально, но когда я загрузить на мой сайт, я получаю ошибку 500 «Страница не может быть дисплей»

меня изменить Memery на 20Мб и chnage сообщение в 1000, но все еще не удается. Я думаю, что мой хост имеет ограничение, он не делает никакого различия, когда я устанавливал в php, все еще не удалось,

Есть ли у меня класс xml, который я могу использовать для обработки этого веб-сайта xml.

UPDATE:

После сдачи этого ini_set('display_errors', E_ALL);

Warning: SimpleXMLElement::__construct(): http:// wrapper is disabled in the server configuration by allow_url_fopen=0 in /.../indeedXMLSearch.php on line 44
Warning: SimpleXMLElement::_construct(http://api.indeed.com/ads/apisearch?publisher=9628233567417007&q=desktop&l=&sort=&radius=30&st=employer&jt=&start=0&limit=10&fromage=&filter=1&latlong=1&co=GB&v=2): failed to open stream: no suitable wrapper could be found in /.../indeedXMLSearch.php on line 44 Warning: SimpleXMLElement::_construct(): I/O warning : failed to load external entity "http://api.indeed.com/ads/apisearch?publisher=9628233567417007&q=desktop&l=&sort=&radius=30&st=employer&jt=&start=0&limit=10&fromage=&filter=1&latlong=1&co=GB&v=2" in /.../indeedXMLSearch.php on line 44 Fatal error: Uncaught exception 'Exception' with message 'String could not be parsed as XML' in /.../indeedXMLSearch.php:44 ...

+1

записи ini_set ('' display_errors, E_ALL); на первой строке вашего кода, а затем запустите его, вы увидите все ошибки. –

+0

Я добавил ошибку, сейчас я размещаю сейчас – user1509201

+0

. Вы можете найти более подробную информацию об ошибке: http://php.net/manual/en/filesystem.configuration.php. Ваш хост отключил возможность просто загружать другой URL как локальный файл. Вы можете попытаться выяснить, включен ли завиток на вашем хосте – koopajah

ответ

1

Для сезона безопасности PHP отключить FOPEN URL в настройки по умолчанию. Лучше получить содержимое файла xml в соответствии с php curl lib и сохранить его в локальном файле.

Затем используйте new SimpleXMLElement ($localxml).

Пример кода:

$xml = "http://...."; 

$ch = curl_init(); 

// set URL and other appropriate options 
curl_setopt($ch, CURLOPT_URL, $xml); 
curl_setopt($ch, CURLOPT_HEADER, 0); 
curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1); 

// grab URL and pass it to the browser 
$xmlcontent = curl_exec($ch); 

// close cURL resource, and free up system resources 
curl_close($ch); 

file_put_contents('/tmp/xmlfile', $xmlcontent); 
$xmlelement = new SimpleXMLElement($xml, null, true); 
..... 
+0

Могу ли я написать свой собственный класс, чтобы сделать это, не используя fopen – user1509201

+0

$ xmlelement = new SimpleXMLElement ($ xml, null, true); по-прежнему использует оригинальный XML-файл – user1509201

+0

Спасибо, что ваш код работал нормально. без меня ничего. – user1509201

0

Тест

$xmlData = simple_xml_load_file(file_get_contents($xml)); 
print_r($xmlData); 

вместо

$xmlData = new SimpleXMLElement($xml, null, true); 
+0

Я использую php 4 на моем хосте. i через file_get_contents только в php 5 – user1509201

+0

Неустранимая ошибка: вызов undefined функции simple_xml_load_file() в – user1509201

+0

file_get_contents также будет сбой, а allow_url_fopen - false. – pensz

Смежные вопросы