<html>
<head>
<title>HTML Document</title>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/1.12.0/jquery.min.js"></script>
</head>
<body>
<div id="hover-id">
Hello World
</div>
<script>
jQuery(document).ready(function($){
$(document).on('mouseover', '#hover-id', function(){
$(this).css('color','yellowgreen');
});
$(document).on('mouseout', '#hover-id', function(){
$(this).css('color','black');
});
});
</script>
</body>
</html>
Я выбрал ответ Prix для указания определения пользовательского агента, но я нашел другой способ сделать цикл, который избегает вложенных циклов и облегчает доступ к другим узлам. Вот что я использую (решение DOM Document):
$xml_url = "https://thehockeywriters.com/category/san-jose-sharks/feed/";
$curl = curl_init();
curl_setopt( $curl, CURLOPT_RETURNTRANSFER, 1 );
curl_setopt( $curl, CURLOPT_URL, $xml_url );
curl_setopt($curl, CURLOPT_USERAGENT, "Mozilla/5.0 (Windows NT 6.2; WOW64; rv:17.0) Gecko/20100101 Firefox/17.0");
$xml = curl_exec( $curl );
curl_close( $curl );
$document = new DOMDocument;
$document->loadXML( $xml );
$items = $document->getElementsByTagName("item");
foreach ($items as $item) {
$title = $item->getElementsByTagName('title')->item(0)->nodeValue;
echo $title;
$desc = $item->getElementsByTagName('description')->item(0)->nodeValue;
echo $desc;
}
Единственная проблема, с которой я столкнулся с вашим кодом, заключалась в том, что отсутствие определения пользовательского агента привело бы к ошибке 403 для доступа к каналу.
В будущем вы можете использовать curl_getinfo
для извлечения кода состояния запроса, чтобы убедиться, что он не сработал, и дополнительно сопоставить его с кодом 200, что означает ОК.
$httpcode = curl_getinfo($curl, CURLINFO_HTTP_CODE);
Помимо этого несколько ошибок в ваших циклах.
С SimpleXML:
<?php
$url = "https://thehockeywriters.com/category/san-jose-sharks/feed/";
$curl = curl_init();
curl_setopt($curl, CURLOPT_USERAGENT, "Mozilla/5.0 (Windows NT 6.2; WOW64; rv:17.0) Gecko/20100101 Firefox/17.0");
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($curl, CURLOPT_URL, $url);
$data = curl_exec($curl);
$httpcode = curl_getinfo($curl, CURLINFO_HTTP_CODE);
curl_close($curl);
if ($httpcode !== 200)
{
echo "Failed to retrieve feed... Error code: $httpcode";
die();
}
$feed = new SimpleXMLElement($data);
// list all titles...
foreach ($feed->channel->item as $item)
{
echo $item->title, "<br>\n";
}
С DOMDocument:
<?php
$url = "https://thehockeywriters.com/category/san-jose-sharks/feed/";
$curl = curl_init();
curl_setopt($curl, CURLOPT_USERAGENT, "Mozilla/5.0 (Windows NT 6.2; WOW64; rv:17.0) Gecko/20100101 Firefox/17.0");
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($curl, CURLOPT_URL, $url);
$data = curl_exec($curl);
$httpcode = curl_getinfo($curl, CURLINFO_HTTP_CODE);
curl_close($curl);
if ($httpcode !== 200)
{
echo "Failed to retrieve feed... Error code: $httpcode";
die();
}
$xml = new DOMDocument();
$xml->loadXML($data);
// list all titles...
foreach ($xml->getElementsByTagName("item") as $item)
{
foreach ($item->getElementsByTagName("title") as $title)
{
echo $title->nodeValue, "<br>\n";
}
}
Если вы просто хотите напечатать название / описание всех элементов:
foreach ($feed->channel->item as $item)
{
echo $item->title;
echo $item->description;
// uncomment the below line to print only the first entry.
// break;
}
Если вам нужна только первая запись без использования foreach:
echo $feed->channel->item[0]->title;
echo $feed->channel->item[0]->description;
Сохранение заголовка и описания в массив для последующего использования:
$result = [];
foreach ($feed->channel->item as $item)
{
$result[] =
[
'title' => (string)$item->title,
'description' => (string)$item->description
];
// could make a key => value alternatively from the above with
// title as key like this:
// $result[(string)$item->title] = (string)$item->description;
}
Foreach с подготовленным оператором MySQLi / PDO :
foreach ($feed->channel->item as $item)
{
// MySQLi
$stmt->bind_param('ss', $item->title, $item->description);
$stmt->execute();
// PDO
//$stmt->bindParam(':title', $item->title, PDO::PARAM_STR);
//$stmt->bindParam(':description', $item->description, PDO::PARAM_STR);
//$stmt->execute();
}