【laravel5.7】第一个Laravel接口之中央气象台天气接口
逛了一圈招聘信息,看来不学点laravel是不行的了~~
php环境之类的我就不提了~
正文:
一、下载安装laravel
官方教程:https://laravelacademy.org/laravel-docs-5_7
安装完的可以跳过以下安装步骤
我这人比较懒,直接下载了个一键安装包解压了事了:https://laravelacademy.org/resources-download
下完解压发现缺了配置文件 .env
在项目根目录下新建.env文件
//window cmd命令:
type nul >.env
//linux 命令:
touch .env
记事本打开输入以下内容并保存
APP_NAME=Laravel
APP_ENV=local
APP_KEY=base64:Xioiluh8yuYi/jljt2pS40ATuqpAFDuclTV9vf+uDgs=
APP_DEBUG=true
APP_LOG_LEVEL=debug
APP_URL=http://localhostDB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=homestead
DB_USERNAME=homestead
DB_PASSWORD=secretBROADCAST_DRIVER=log
CACHE_DRIVER=file
SESSION_DRIVER=file
SESSION_LIFETIME=120
QUEUE_DRIVER=syncREDIS_HOST=127.0.0.1
REDIS_PASSWORD=null
REDIS_PORT=6379MAIL_DRIVER=smtp
MAIL_HOST=smtp.mailtrap.io
MAIL_PORT=2525
MAIL_USERNAME=null
MAIL_PASSWORD=null
MAIL_ENCRYPTION=nullPUSHER_APP_ID=
PUSHER_APP_KEY=
PUSHER_APP_SECRET=
根目录下命令行运行如下命令 生成key
php artisan key:generate
配置站点至public目录
打开网站看到这玩意说明装好了
二、新建控制器
有兴趣的可以去官方文档看下目录结构,没兴趣的接着往下看
一开始建议用命令生成,在根目录下运行创建api模块Weather控制器
php artisan make:controller Api/WeatherController
此时 app/Http/controllers/Api 目录下会生成 WeatherController.php文件(老手可不用命令行,直接新建控制器)
三、新建控制器方法
打开WeatherController.php 在类里添加 getWeather 方法
class WeaghterController extends Controller
{function getWeather(){echo 'halo wo~';}
}
四、配置路由
有兴趣的可以去官方文档看下路由配置详解,没兴趣的接着往下看
打开 routes/web.php 路由配置文件,添加一行
//get请求 ‘/getWeather’ 指向 Api模块 WeatherController控制器 getWeather方法
Route::get('getWeather', 'Api\WeatherController@getWeather');
打开浏览器 输入 http://域名/getWeather ,能看到 ‘halo wo~';就说明控制器,方法及路由以搞好
五、爬天气接口
进入中央气象台天气 官网 http://www.nmc.cn/
查询你想要的地方如深圳http://www.nmc.cn/publish/forecast/AGD/shenzhen.html
打开浏览器F12调试模式,再刷新页面,先找到深圳对应的编码,比如这里的 59493
查看netword网络请求
复制链接网址得到的是 http://www.nmc.cn/f/rest/real/59493?_=1539152574236
即 http:域名/f/rest/real/城市编号(后面的参数 _=1539152574236 是当前时间戳),经测试域名可能会换,注意更新接口
福利:返回参数里面的 weather.img 是天气图标,图标网址为 :
"http://image.nmc.cn/static2/site/nmc/themes/basic/weather/white/day/"+weather.img+".png"
比如这里weather.img = 1,则图标网址为 http://image.nmc.cn/static2/site/nmc/themes/basic/weather/white/day/1.png
六、自己的接口编写
修改刚才建好的控制器
class WeatherController extends Controller
{/*** 封装一个get请求方法* @param $url 网址* @param null $_header 请求头* @return mixed*/function get($url,$_header = NULL){//通过curl实现get请求 感兴趣的朋友百度 php curl深入了解$curl = curl_init();if( stripos($url, 'https://') !==FALSE ){curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, FALSE);curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, FALSE);}curl_setopt($curl, CURLOPT_URL, $url);curl_setopt($curl, CURLOPT_HEADER, 0);curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);if ( $_header != NULL ){curl_setopt($curl, CURLOPT_HTTPHEADER, $_header);}$ret = curl_exec($curl);$info = curl_getinfo($curl);curl_close($curl);return $ret;}/*** 天气查询接口(深圳)*/function getWeather(){//中央气象局接口地址$url = 'http://www.nmc.cn/f/rest/real/59493?_='.time()*1000;//模拟请求$get_weather = $this->get($url);//格式化处理结果$get_weather = json_decode($get_weather,1);//拼装需要的数据$weather = ['city' => empty($get_weather['station']['city'])?"":$get_weather['station']['city'],'weather' => empty($get_weather['weather']['info'])?"":$get_weather['weather']['info'],'img_url' => empty($get_weather['weather'])?"":"http://image.nmc.cn/static2/site/nmc/themes/basic/weather/white/day/".$get_weather['weather']['img'].".png",'direct' => empty($get_weather['wind']['direct'])?"":$get_weather['wind']['direct'],'power' => empty($get_weather['wind']['power'])?"":$get_weather['wind']['power'],'temperature' => empty($get_weather['weather']['temperature'])?"":$get_weather['weather']['temperature'],'date' => date("Y-m-d",time())];exit(json_encode($weather));}
}
测试接口返回
【laravel5.7】第一个Laravel接口之中央气象台天气接口相关推荐
- android百度天气预报接口,用百度天气接口的实现安卓天气预报(json数据)
代码地址: 具体思路: 1.写一个线程,其中city_str就是城市名,例如 city_str="宁波"; 2.然后通过线程取百度天气接口json数据 (注意不要用ie开这个网址, ...
- android百度天气接口api接口,百度天气接口api
百度天气接口 以GET形式提交,返回JSON或XML URL:http://api.map.baidu.com/telematics/v3/weather?location={城市名}&out ...
- 简单几步写一个laravel扩展包
为什么80%的码农都做不了架构师?>>> laravel使用composer来管理扩展包,理解composer和laravel的开发模式,可以通过简单的几个步骤,快速写出一个l ...
- java模拟使用接口,关于java:模拟一个类与模拟它的接口
对于单元测试,我需要模拟几个依赖项.依赖项之一是实现接口的类: public class DataAccessImpl implements DataAccess { ... } 我需要设置一个这个类 ...
- 一个类可以实现多个接口但是只能实现一个类
public class SpbmServiceImpl extends BasicServiceImpl implements ISpbmService,ISpbmDao {} 一个类可以实现多个接 ...
- java如何定义一个接口inf_java.抽象、接口
抽象 如果父类当中的方法不确定如何进行{}方法体实现,那么这就应该是一个抽象方法 定义 抽象方法:在返回值前加上abstract关键字,然后去掉大括号,分号直接结束. 抽象类:抽象方法所在的类,必须是 ...
- [基础题] 5.(*)按如下要求编写Java应用程序:(1)编写一个用于表示战斗能力的接口Fightable,
/*5.(*)按如下要求编写Java应用程序: (1)编写一个用于表示战斗能力的接口Fightable, 该接口包含:整型常量MAX: 方法void win(),用于描述战斗者获胜后的行为: 方法in ...
- 一个类可以实现多个接口吗_Java入门:基础知识(面向对象:接口)
接着上一篇的基础知识,今天俺们来学习一下: 面向对象 (万物皆对象) 三大特征(封装.继承.多态) 接口 接口 概述:接口是一种引用数据类型,是方法的'集合',接口的内部主要是定义方法,包含常量.抽象 ...
- ASM 判定一个类,实现了指定接口
为什么80%的码农都做不了架构师?>>> ASM 判定一个类,实现了指定接口 技术支持 ASM 中,ClassReader 类:对已存在的进行解析,并提供获取类信息的方法. 通 ...
- Java两同_java:一个类实现的两个接口里都有同一个方法(名),怎么处理?
不一定,关键要看子类是否是抽象类. 如果子类是非抽象类,则必须实现接口中的所有方法: 如果子类是抽象类,则可以不实现接口中的所有方法,因为抽象类中允许有抽象方法的存在! 1.抽象类定义 抽象类往往用来 ...
最新文章
- JQuery模拟网页中自定义鼠标右键菜单
- avcodec_encode_video2 -22
- 为新研究准备好一块用武之地:最全任务型对话数据调研
- Oracle应用集群详解
- Java集合框架练习-计算表达式的值
- 4 int.parse方法调用问题和同行评审
- linux安装python27_linux下安装python27 nginx 和uwsgi
- TestNG执行测试方法依赖关系
- MAYA制作女猎人角色毛发-3D建模场景模型教程
- 中兴面试题 01背包问题
- ppt入门到精通全套视频教程,Word+Excel+PPT三合一教程(15G)
- 内存卡 android 刷机教程,怎样用卡刷包刷机?安卓手机通用刷机包卡刷教程
- 洛谷 P4578 [FJOI2018] Upc6605 福建OI2018 所罗门王的宝藏
- 孙子兵法——02 作战第二
- ensp ethernet端口配置ip问题
- Ubuntu22.04平台安装weston
- 冰河凭什么能够顺利拿下三个软考高级证书?有什么技巧(诀窍)吗?
- web前端开发专业课程,10大前端常用算法
- 什么是智能双线机房和BGP智能双线机房的原理
- 酒店IPTV系统​​​​项目开发总结和方案简介(含语音、监控、直播、点播、回看、酒店服务、客房管理、周边景点等功能模块)