天気予報のデータが欲しい どうしたものか。
<?php
$rss = simplexml_load_file( 'https://rss-weather.yahoo.co.jp/rss/days/4410.xml' );//ヤフーRSS
$list1 = '<ul>';
$i = 0;
foreach ($rss->channel->item as $item) {
if($i >= 1){//ひとつだけ1行だけ取得
break;
}
$list1 .= '<li><a href="';
$list1 .= $item->link;
$list1 .= '">';
$list1 .= $item->title;
$list1 .= '</a></li>';
$i++;
}
list1 .= '</ul>';
echo $list1;
simplexml_load_fileでとってくる
サンプルhttps://blog.tama-tama.net/test/rss/
https://rss-weather.yahoo.co.jp/rss/days/4410.xmlが「Yahoo!天気 RSS 提供終了」してしまったのでその代わり。simple_html_dom.phpでスクレイピングする。
<?php
require_once "./simple_html_dom.php";//https://sourceforge.net/projects/simplehtmldom/files/からsimple_html_dom.phpダウンロード
$url = "https://weather.yahoo.co.jp/weather/jp/13/4410.html";//やふーの天気予報ページ(東京のやつ
$htmlSource = $this->getApiDataCurl($url,"html");
$html = str_get_html( $htmlSource );
$tenki_remarks1 = ($html->find(".date",0)->plaintext);//日付
$tenki_remarks2 = ($html->find(".pict",0)->plaintext);//天気
$tenki_remarks3 = ($html->find(".high",0)->plaintext);//最高気温
$tenki_remarks4 = ($html->find(".low",0)->plaintext);//最低気温
echo"$tenki_remarks1";//
echo"$tenki_remarks2";//
echo"$tenki_remarks3";//
echo"$tenki_remarks4";//
//参考URL https://blog.s-giken.net/440.html
function getApiDataCurl($url, $responseType = "html" ){
if ( $responseType == "header" ) {
$option = [
CURLOPT_RETURNTRANSFER => true, // 文字列として返す
CURLOPT_TIMEOUT => 3000, // タイムアウト時間
CURLOPT_HEADER => true,
CURLOPT_NOBODY => true,
CURLOPT_SSL_VERIFYPEER => false, // サーバ証明書の検証をしない
];
} else {
$option = [
CURLOPT_RETURNTRANSFER => true, // 文字列として返す
CURLOPT_TIMEOUT => 3000, // タイムアウト時間
CURLOPT_SSL_VERIFYPEER => false, // サーバ証明書の検証をしない
CURLOPT_USERAGENT => USER_AGENT_TEXT, // UserAgentを指定
];
}
$ch = curl_init($url);
curl_setopt_array($ch, $option);
$body = curl_exec($ch);
$info = curl_getinfo($ch);
$errorNo = curl_errno($ch);
$errorMsg = curl_error($ch);
// 「CURLE_OK」以外はエラーなのでエラー情報を返す
if ($errorNo !== CURLE_OK) {
// 詳しくエラーハンドリングしたい場合はerrorNoで確認
// タイムアウトの場合はCURLE_OPERATION_TIMEDOUT
return $errorNo . " : " . $errorMsg;
}
// 200以外のステータスコードは失敗なのでそのステータスコードを返す
if ($info['http_code'] !== 200) {
return $info['http_code'];
}
// headerのみ取得
if($responseType == "header") {
$responseArray = explode("\n", $body); // 行に分割
$responseArray = array_map('trim', $responseArray); // 各行にtrim()をかける
$responseArray = array_filter($responseArray, 'strlen'); // 文字数が0の行を取り除く
$responseArray = array_values($responseArray); // キーを連番に振りなおす
// HTMLの本体を取得
} elseif($responseType == "html"){
$responseArray = $body;
// JSONで取得した情報を配列に変換して取得
} else {
$responseArray = json_decode($body, true); // JSON を配列に変換
}
return $responseArray;
}
コメント