腾讯云是免费的, 但有额度, 貌似100万请求来着… 做个追剧更新爬虫什么的自用 还是可以的!
开始:
创建API key
https://console.cloud.tencent.com/cam/capi
(貌似不需要这一步,因为后面暂时用不到)
创建云函数
打开
https://console.cloud.tencent.com/scf/list?rid=8&ns=default
点创建云函数, 选java平台
打开IDEA 创建Gradle java工程
next next … finish
修改build.gradle
创建完成后 添加 sdk以及打包zip脚本, 等会要打包提交到服务器
repositories {
mavenCentral()
}
dependencies {
testCompile group: 'junit', name: 'junit', version: '4.12'
compile('com.tencentcloudapi:scf-java-events:0.0.1')
// compile fileTree(dir: 'jars', include: '*.jar')
}
apply plugin: 'java'
task buildZip(type: Zip) {
from compileJava
from processResources
into('lib') {
from configurations.runtime
}
}
build.dependsOn buildZip
tasks.withType(JavaCompile) {
options.encoding = "UTF-8"
}
新建example包名
新建Main类,
写mainHandler(APIGatewayProxyRequestEvent event)函数
如下:
public class Main {
public String mainHandler(APIGatewayProxyRequestEvent event) {
//Map queryString = event.getQueryString();
//传入的参数这样判断
// if (queryString.containsKey("keyword")) {
// try {
// return query(queryString.get("keyword"));
// } catch (Exception e) {
// e.printStackTrace();
// return e.getMessage();
// }
// }
return event+"";//打印 event, 获取参数见上面的注释
}
}
注意 代码里可以执行一个http请求操作,这样就可以实现服务爬虫什么的
就普通的http get post即可 , 记得不可使用异步支持, 必须同步执行
如:
public String mainHandler(APIGatewayProxyRequestEvent event) {
return HttpUtil.request(...略);
}
具体这里就不演示了
填执行方法
打包项目为zip
回到工程
在右侧工具类 点击build
然后生成一个zip文件(看我路径)
上传源码
然后回到云函数平台选择上传这个zip
记得要选择模板为 API网关, 保存, 界面会刷新 , 步骤如图
测试
最后点击测试 看日志是否输出想要的内容
添加触发方式
选api网关 方式
其它默认 点保存即可
最后生成一个地址
这个地址直接指向刚才开发的java代码的 mainHandler 函数
可以用自己的域名做域名解析到这个腾讯官方的域名
其它:
创建触发规则时你会发现 可以做定时任务 什么的 对应的类名以api网关为例APIGatewayProxyRequestEvent 类,
其它功能 看源码自己理解:
(腾讯云官网没有java 版的sdk文档以上都是我摸索出来的 (php python nodejs倒是有很多文档, 包括例子, 真的坑))
补充(20191223)
我看了sdk源码, 发现API网关与官网的模板有关, 但上图中的sdk源码中没写触发方式里的自动任务怎么实现
其实很简单
就是先新建模板
选对应的触发事件, 如定时器
此时会出现一个json, 把这个json转java对象即可
如:
public class AutoJob {
//官网例子有问题, 这里需要写注解JsonProperty
//强制设置json类型大小写开头
//(不设置的话, 解析错误, 变成小写开头不知道为什么)
@JsonProperty("Type")
private String Type;
@JsonProperty("TriggerName")
private String TriggerName;
@JsonProperty("Time")
private String Time;
@JsonProperty("Message")
private String Message;
public String getType() {
return Type;
}
public void setType(String Type) {
this.Type = Type;
}
public String getTriggerName() {
return TriggerName;
}
public void setTriggerName(String TriggerName) {
this.TriggerName = TriggerName;
}
public String getTime() {
return Time;
}
public void setTime(String Time) {
this.Time = Time;
}
public String getMessage() {
return Message;
}
public void setMessage(String Message) {
this.Message = Message;
}
}
注意 一开始我没加@JsonProperty 会导致解析出问题, 官网压根没说, 真的坑
其它功能也是一样的, 就是找到json, 然后转对象即可, 注意如果首字母大写就要用@JsonProperty 强行设置
其余就没什么了.
完