1,yahoo 天气预报
地址 http://developer.yahoo.com/weather/
代码:
header ( 'Content-Type: text/html; charset = utf-8' );
class weather {
static $url = 'http://xml.weather.yahoo.com/forecastrss?u=c&w=';
static $city = 'Beijing'; //默认城市北京 这里要注意的是 city 要填拼音 我试过用中文有好几个地区都调用不到
static $weatherXML = '';
static $woeid_file = "woeid";
static $file_path = "data/";
/**
* 获得远程xml并缓存到本地
*/
static public function getXML($city = null) {
if ($city != null){
self::$city = $city;
}
self::$weatherXML = self::$file_path . md5(self::$city) . '-weather.xml';
if (file_exists( self::$weatherXML )) {
$fileTime = filemtime ( self::$weatherXML );
$stater = time () - $fileTime - 60 * 60 * 2;
if ($stater > 0) {
return true;
}
}
//获取woeid
$woeid = self::getWOEID();
self::$url = self::$url . $woeid[0];
//获取当天 天气
$XML = self::vget(self::$url);
//保存当天 天气到文件
self::cacheXML($XML);
self::analysisXML($XML);
}
static public function analysisXML($simple) {
$p = xml_parser_create();
xml_parse_into_struct($p, $simple, $vals, $index);
xml_parser_free($p);
//本周天气
$weekindex = $index['YWEATHER:FORECAST'];
$week = array();
foreach($weekindex as $k=>$v){
$week[$k] = $vals[$v]['attributes'];
}
unset($index);
unset($vals);
print_r($week);
/*
<yweather:forecast day="Wed" date="18 Sep 2013" low="20" high="32" text="Sunny" code="32"/>
* day 星期
* date 日期
* low 最低温度
* high 最高温度
* test 天气状态
* code 天气图标
*/
}
/*
* 取得地区WOEID码
*/
static private function getWOEID(){
static $woeid = array();
if(isset()($woeid[self::$city])){
return $woeid[self::$city];
}
if (file_exists( self::$file_path . self::$woeid_file )) {
$woeidSTR = file_get_contents(self::$file_path . self::$woeid_file);
$woeid = json_decode()($woeidSTR , true);
if(isset($woeid[self::$city])){
return $woeid[self::$city];
}
}
$geoPlaces = "http://query.yahooapis.com/v1/public/yql?q=select%20woeid%20from%20geo.places%20where%20text='".self::$city."%20CH'";
$XML = simplexml_load_file( $geoPlaces );
if(isset($XML->results->place[0])){
$rs = $woeid[self::$city] = $XML->results->place[0]->woeid;
//保存到文件
$woeidSTR = json_encode($woeid);
file_put_contents(self::$file_path . self::$woeid_file, $woeidSTR);
return $rs;
}else{
//如果找不到城市 woeid 默认城市就改为 北京
self::$city = "Beijing";
return self::getWOEID();
}
}
/**
* 创建xml缓存
* @param $contents 要缓存的内容
*/
static private function cacheXML($contents) {
$contents = str_ireplace ( '<?xml version="1.0"?>', "<?xml version=\"1.0\"?> \n", $contents );
$contents = mb_convert_encoding ( $contents, 'utf-8', 'gbk' );
file_put_contents ( self::$weatherXML, $contents ) or die ( '没有写权限' );
}
/**
* 模拟获取内容函数
* @param type $url
* @return type
*/
static private function vget($url) {
$user_agent = "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.2; .NET CLR 1.1.4322)";
$curl = curl_init (); // 启动一个CURL会话
curl_setopt ( $curl, CURLOPT_URL, $url ); // 要访问的地址
curl_setopt ( $curl, CURLOPT_SSL_VERIFYPEER, 0 ); // 对认证证书来源的检查
curl_setopt ( $curl, CURLOPT_SSL_VERIFYHOST, 1 ); // 从证书中检查SSL加密算法是否存在
curl_setopt ( $curl, CURLOPT_USERAGENT, $user_agent ); // 模拟用户使用的浏览器
@curl_setopt ( $curl, CURLOPT_FOLLOWLOCATION, 1 ); // 使用自动跳转
curl_setopt ( $curl, CURLOPT_AUTOREFERER, 1 ); // 自动设置Referer
curl_setopt ( $curl, CURLOPT_HTTPGET, 1 ); // 发送一个常规的Post请求
curl_setopt ( $curl, CURLOPT_TIMEOUT, 120 ); // 设置超时限制防止死循环
curl_setopt ( $curl, CURLOPT_HEADER, 0 ); // 显示返回的Header区域内容
curl_setopt ( $curl, CURLOPT_RETURNTRANSFER, 1 ); // 获取的信息以文件流的形式返回
$tmpInfo = curl_exec ( $curl ); // 执行操作
if (curl_errno ( $curl )) {
curl_close ( $curl ); // 关闭CURL会话
die('Errno' . curl_error ( $curl )) ;
}
curl_close ( $curl ); // 关闭CURL会话
return $tmpInfo; // 返回数据
}
}
weather::getXML("Changsha");
2,新浪天气
地址:http://php.weather.sina.com.cn
代码:
header ( 'Content-Type: text/html; charset = utf-8' );
class weather {
static $url = 'http://php.weather.sina.com.cn/xml.php?password=DJOYnieT8234jlsK&day=0&city=';//password是固定值
static $city = '%B1%B1%BE%A9'; //默认城市北京
static $weatherXML = '';
static $file_path = "data/";
/**
* 获得远程xml并缓存到本地
*/
static public function getXML($city = null) {
if ($city != null){
$city = mb_convert_encoding ( $city, 'gbk', 'utf-8' );
self::$city = urlencode($city);
}
self::$weatherXML = self::$file_path . md5(self::$city) . '-weather.xml';
if (file_exists( self::$weatherXML )) {
$fileTime = filemtime ( self::$weatherXML );
$stater = time () - $fileTime - 60 * 60 * 2;
if ($stater > 0) {
return true;
}
}
$contents = self::vget( self::$url . self::$city );
self::cacheXML ( $contents );
self::analysisXML();
}
/**
* 解析xml
*/
static public function analysisXML() {
$XML = simplexml_load_file(self::$weatherXML );
print_r($XML);
}
/**
* 创建xml缓存
* @param $contents 要缓存的内容
*/
static private function cacheXML($contents) {
$contents = str_ireplace ( '<?xml version="1.0"?>', "<?xml version=\"1.0\"?> \n", $contents );
file_put_contents ( self::$weatherXML, $contents ) or die ( '没有写权限' );
}
/**
* 模拟获取内容函数
* @param type $url
* @return type
*/
static private function vget($url) {
$user_agent = "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.2; .NET CLR 1.1.4322)";
$curl = curl_init (); // 启动一个CURL会话
curl_setopt ( $curl, CURLOPT_URL, $url ); // 要访问的地址
curl_setopt ( $curl, CURLOPT_SSL_VERIFYPEER, 0 ); // 对认证证书来源的检查
curl_setopt ( $curl, CURLOPT_SSL_VERIFYHOST, 1 ); // 从证书中检查SSL加密算法是否存在
curl_setopt ( $curl, CURLOPT_USERAGENT, $user_agent ); // 模拟用户使用的浏览器
@curl_setopt ( $curl, CURLOPT_FOLLOWLOCATION, 1 ); // 使用自动跳转
curl_setopt ( $curl, CURLOPT_AUTOREFERER, 1 ); // 自动设置Referer
curl_setopt ( $curl, CURLOPT_HTTPGET, 1 ); // 发送一个常规的Post请求
curl_setopt ( $curl, CURLOPT_TIMEOUT, 120 ); // 设置超时限制防止死循环
curl_setopt ( $curl, CURLOPT_HEADER, 0 ); // 显示返回的Header区域内容
curl_setopt ( $curl, CURLOPT_RETURNTRANSFER, 1 ); // 获取的信息以文件流的形式返回
$tmpInfo = curl_exec ( $curl ); // 执行操作
if (curl_errno ( $curl )) {
curl_close ( $curl ); // 关闭CURL会话
die('Errno' . curl_error ( $curl )) ;
}
curl_close ( $curl ); // 关闭CURL会话
return $tmpInfo; // 返回数据
}
}
weather::getXML();
您可能感兴趣的文章:
php 天气预报代码一例php调用google天气api的实例代码
Google API 获取当前天气信息的php代码
php取得youku视频最终地址的实现代码。
例子:
<?php
/**
* 取得youku视频的最终地址
* edit by www.
* at: 2013-10-2
*/
class YoukuFlv{
static private $error = "";
static private $result = array();
static public function getYoukuFlv($url){
//从url获取youkuid
if(! $id = self::getYoukuId($url)){
return false;
}
//获取youku视频详细信息
$content = self::get_curl_contents( "http://v.youku.com/player/getPlayList/VideoIDS/".$id );
$data = json_decode()($content);
if(!isset()($data->data[0]->streamfileids)){
self::$error = "Cannot find this video";
return false;
}
foreach($data->data[0]->streamfileids AS $k=>$v){
if($k == 'flv' || $k == 'mp4'){
//sid
$sid= self::getSid();
//fileid
$fileid = self::getfileid($v,$data->data[0]->seed);
$one=($data->data[0]->segs->$k);
self::$result[$k] = "http://f.youku.com/player/getFlvPath/sid/{$sid}_00/st/{$k}/fileid/{$fileid}?K={$one[0]->k}";
}
}
if(empty(self::$result)){
self::$error = "THIS VIOD IS NOT IN MP4 OR FLV FORMAT";
return false;
}else{
return true;
}
}
static public function error(){
return self::$error;
}
static public function result(){
return self::$result;
}
static private function getYoukuId($url){
//url 不能为空
if($url == "" || substr($url , 0 , 29) != "http://v.youku.com/v_show/id_"){
self::$error = "URL IS ERROR";
return false;
}
return substr($url , 29 , -5);
}
static private function get_curl_contents($url, $second = 5){
if(!function_exists('curl_init')) die('php.ini未开启php_curl.dll');
$c = curl_init();
curl_setopt($c,CURLOPT_URL,$url);
$UserAgent=$_SERVER['HTTP_USER_AGENT'];
curl_setopt($c,CURLOPT_USERAGENT,$UserAgent);
curl_setopt($c,CURLOPT_HEADER,0);
curl_setopt($c,CURLOPT_TIMEOUT,$second);
curl_setopt($c,CURLOPT_RETURNTRANSFER, true);
$cnt = curl_exec($c);
curl_close($c);
return $cnt;
}
static private function getSid() {
$sid = time().(rand(0,9000)+10000);
return $sid;
}
static private function getfileid($fileId,$seed) {
$mixed = self::getMixString($seed);
$ids = explode()("*",$fileId);
unset($ids[count($ids)-1]);
$realId = "";
for ($i=0;$i < count($ids);++$i) {
$idx = $ids[$i];
$realId .= substr($mixed,$idx,1);
}
return $realId;
}
static private function getMixString($seed) {
$mixed = "";
$source = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ/\\:._-1234567890";
$len = strlen($source);
for($i=0;$i< $len;++$i){
$seed = ($seed * 211 + 30031) % 65536;
$index = ($seed / 65536 * strlen($source));
$c = substr($source,$index,1);
$mixed .= $c;
$source = str_replace()($c, "",$source);
}
return $mixed;
}
}
if(YoukuFlv::getYoukuFlv("http://v.youku.com/v_show/id_XNjEyOTE4NTEy_ev_1.html")){
print_r( YoukuFlv::result() );
}else{
echo YoukuFlv::error();
}
?>
另外一种调用方法:
http://player.youku.com/player.php/sid/XMjI0MDIwNDc2/v.swf
http://player.youku.com/player.php/sid/{$id}/v.swf
例1,使用basename、dirname函数取得文件与路径名。
$full_name = '/usr/local/php/php.ini';
$base = basename($full_name); // $base is "php.ini"
$dir = dirname($full_name); // $dir is "/usr/local/php"
?>
例2,使用basename函数从路径中取得文件名。
$path = "/home/www/data/users.txt";
$filename = basename($path);
print $filename;
?>