Severless+企業微信に基づいてnCoV疫情監視アシスタントを構築
12065 ワード
最近のいくつかの疫病情報はとても心配で、みんなが疫病情報を把握するのを便利にするために、暇な間にnCoVに関する疫病監視のアシスタントをしました.主な機能は、企業の微信のWebHookを通じて疫病情報をプッシュすることだ.ここでは、Server lessを使用した全体的なコード構想とアーキテクチャを共有します.
効果の実現
私たちが実現したい大まかな効果は次のとおりです.
まず、私たちが解決しなければならないのはデータソースの問題です.ここではpython爬虫類を使ってこのことをすることができますが、個人が怠け者なので直接使う2019-nCoV-Crawlerです.このプロジェクトは既存のAPIを統合しているので、直接呼び出せばいいです.もちろん能力のある学生も自分でPythonを配置することができて、私の側は自分で配置したので、しかしこれは今回の重点ではありませんて、贅沢に述べません.
今、私たちはデータを持っていますが、データはどのようにサーバーにかけますか?どうやってトリガーしますか?もちろんCVMを使ってもいいですが、不器用すぎて消費量が多く、自分ですべての環境を作る必要があります.そこで、ここではServer less方式を使用して導入します.
コアロジック
全体的なビジネスのコード部分を見てみましょう.結局、ここはロボット全体の核心です.コードを見てみましょう(3回のインタフェースを要求します):
簡単ではないでしょうか.データを要求し、送信する.
では、ビジネスコードをクラウドにアップロードする方法に重点を置きました.ここのクラウドは私が使っているのはテンセントクラウドServer lessサービスSCFクラウド関数です.導入全体、使用過程は無料で、開発者にとって小さなプロジェクトで使用すれば無料額は十分です.追加料金の心配はありません.
Severlessの導入は、比較的ポピュラーなServerless Frameworkを使用しています.使用と導入も完全に無料です.では、具体的な導入手順を紹介します.
Serverlessフレームワークのインストール
まず、最初のステップでは、Server less Frameworkの開発フレームワークをインストールします.
次に、関数ディレクトリを作成します.
関連する関数ディレクトリの内容は次のとおりです.
Ymlファイルの設定
次に、関数ymlファイルを構成するためのメインイベントです.
万事そろっていれば、SLSを直接配置することができます.
クラウドへの導入
slsコマンド(serverlessの略)で配置し、–debugパラメータを追加して配置中の情報を表示します.
実行結果は次のとおりです.
これで、nCoVのオンライントリガ関数ロボットを完成させました~簡単ではないでしょうか.さあ始めよう~
転送ゲート: GitHub: github.com/serverless 公式サイト:serverless.com ようこそ:Severless中国語ネットワーク、ベストプラクティスでは、Server lessアプリケーションの開発をより多く体験できます.
おすすめ:
『Server lessアーキテクチャ:原理、設計からプロジェクト実戦まで』
:tabor
効果の実現
私たちが実現したい大まかな効果は次のとおりです.
まず、私たちが解決しなければならないのはデータソースの問題です.ここではpython爬虫類を使ってこのことをすることができますが、個人が怠け者なので直接使う2019-nCoV-Crawlerです.このプロジェクトは既存のAPIを統合しているので、直接呼び出せばいいです.もちろん能力のある学生も自分でPythonを配置することができて、私の側は自分で配置したので、しかしこれは今回の重点ではありませんて、贅沢に述べません.
今、私たちはデータを持っていますが、データはどのようにサーバーにかけますか?どうやってトリガーしますか?もちろんCVMを使ってもいいですが、不器用すぎて消費量が多く、自分ですべての環境を作る必要があります.そこで、ここではServer less方式を使用して導入します.
コアロジック
全体的なビジネスのコード部分を見てみましょう.結局、ここはロボット全体の核心です.コードを見てみましょう(3回のインタフェースを要求します):
"https://lab.isaaclin.cn/nCoV/api/area?latest=0&province=%E5%B9%BF%E4%B8%9C%E7%9C%81",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 3000,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => array(
"Accept: */*",
"Cache-Control: no-cache",
"Connection: keep-alive",
"Host: lab.isaaclin.cn",
"Postman-Token: 680e5ea7-5c2e-4fb6-9295-7e336f2252c6,abd73e01-2a60-42b5-9bbe-92aa83805a7e",
"User-Agent: PostmanRuntime/7.15.0",
"accept-encoding: gzip, deflate",
"cache-control: no-cache"
),
));
$responsesz = curl_exec($curlsz);
$echo_responsesz = json_decode($responsesz, true);
$err = curl_error($curlsz);
curl_close($curlsz);
//
$curlhb = curl_init();
curl_setopt_array($curlhb, array(
CURLOPT_URL => "https://lab.isaaclin.cn/nCoV/api/area?latest=0&province=%E6%B9%96%E5%8C%97%E7%9C%81",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 3000,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => array(
"Accept: */*",
"Cache-Control: no-cache",
"Connection: keep-alive",
"Host: lab.isaaclin.cn",
"Postman-Token: 680e5ea7-5c2e-4fb6-9295-7e336f2252c6,abd73e01-2a60-42b5-9bbe-92aa83805a7e",
"User-Agent: PostmanRuntime/7.15.0",
"accept-encoding: gzip, deflate",
"cache-control: no-cache"
),
));
$responsehb = curl_exec($curlhb);
$echo_responsehb = json_decode($responsehb, true);
$err = curl_error($curlhb);
curl_close($curlhb);
//
$curlall = curl_init();
curl_setopt_array($curlall, array(
CURLOPT_URL => "https://lab.isaaclin.cn/nCoV/api/overall",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 3000,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => array(
"Accept: */*",
"Cache-Control: no-cache",
"Connection: keep-alive",
"Host: lab.isaaclin.cn",
"Postman-Token: 680e5ea7-5c2e-4fb6-9295-7e336f2252c6,abd73e01-2a60-42b5-9bbe-92aa83805a7e",
"User-Agent: PostmanRuntime/7.15.0",
"accept-encoding: gzip, deflate",
"cache-control: no-cache"
),
));
$responseall = curl_exec($curlall);
$echo_responseall = json_decode($responseall, true);
$err = curl_error($curlall);
curl_close($curlall);
// ( , )
if ($echo_responsesz['results'][0]['cities'][0]['cityName'] == ' ') {
$echo_responseszqz = $echo_responsesz['results'][0]['cities'][0]['confirmedCount'];
$echo_responseszys = $echo_responsesz['results'][0]['cities'][0]['suspectedCount'];
$echo_responseszzy = $echo_responsesz['results'][0]['cities'][0]['curedCount'];
$echo_responseszsw = $echo_responsesz['results'][0]['cities'][0]['deadCount'];
} else {
$echo_responseszqz = $echo_responsesz['results'][0]['cities'][1]['confirmedCount'];
$echo_responseszys = $echo_responsesz['results'][0]['cities'][1]['suspectedCount'];
$echo_responseszzy = $echo_responsesz['results'][0]['cities'][1]['curedCount'];
$echo_responseszsw = $echo_responsesz['results'][0]['cities'][1]['deadCount'];
}
if ($err) {
echo "cURL Error #:" . $err;
} else {
//
$sc = $sc=" **2019-nCoV :**
> :
> ".$echo_responseall['results'][0]['confirmedCount'].", ".$echo_responseall['results'][0]['suspectedCount'].", ".$echo_responseall['results'][0]['curedCount'].", ".$echo_responseall['results'][0]['deadCount']."
> :
> ".$echo_responsesz['results'][0]['confirmedCount'].", ".$echo_responsesz['results'][0]['suspectedCount'].", ".$echo_responsesz['results'][0]['curedCount'].", ".$echo_responsesz['results'][0]['deadCount']."
> :
> ".$echo_responsehb['results'][0]['confirmedCount'].", ".$echo_responsehb['results'][0]['suspectedCount'].", ".$echo_responsehb['results'][0]['curedCount'].", ".$echo_responsehb['results'][0]['deadCount']."
> :
> ".$echo_responseszqz.", ".$echo_responseszys.", ".$echo_responseszzy.", ".$echo_responseszsw."
> ".$echo_responseall['results'][0]['note1']."
> ".$echo_responseall['results'][0]['note2']."
> ".$echo_responseall['results'][0]['note3']."
> ".$echo_responseall['results'][0]['remark1']."
> ".$echo_responseall['results'][0]['remark2']."
> :".$echo_responseall['results'][0]['generalRemark']."
>[ ](https://news.qq.com/zt2020/page/feiyan.htm)
";
$post = array('msgtype' => 'markdown', 'markdown' => array('content' => $sc));
$curl = curl_init();
curl_setopt_array($curl, array(
CURLOPT_URL => "https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=", // HOOK ,https://work.weixin.qq.com/api/doc/90000/90136/91770
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 10,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode($post,JSON_UNESCAPED_UNICODE),
CURLOPT_HTTPHEADER => array(
"Cache-Control: no-cache",
"Postman-Token: ab32082b-ce64-4832-b51f-8f2f1b3e98ef"
),
));
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
return " ";
}
}
?>
簡単ではないでしょうか.データを要求し、送信する.
では、ビジネスコードをクラウドにアップロードする方法に重点を置きました.ここのクラウドは私が使っているのはテンセントクラウドServer lessサービスSCFクラウド関数です.導入全体、使用過程は無料で、開発者にとって小さなプロジェクトで使用すれば無料額は十分です.追加料金の心配はありません.
Severlessの導入は、比較的ポピュラーなServerless Frameworkを使用しています.使用と導入も完全に無料です.では、具体的な導入手順を紹介します.
Serverlessフレームワークのインストール
まず、最初のステップでは、Server less Frameworkの開発フレームワークをインストールします.
$ npm install -g serverless
次に、関数ディレクトリを作成します.
$ mkdir nCov-function
$ cd nCov-function
関連する関数ディレクトリの内容は次のとおりです.
|- code
|- index.php //
|- serverless.yml //serverless
Ymlファイルの設定
次に、関数ymlファイルを構成するためのメインイベントです.
# serverless.yml
myFunction:
component: "@serverless/tencent-scf" // tencent-scf component
inputs:
name: nCoVFunction //
enableRoleAuth: true
codeUri: ./code //
handler: index.main_handler
runtime: Php5
region: ap-shanghai //
description: My Serverless nCoV Function.
memorySize: 128 //
timeout: 20 //
exclude:
- .gitignore
- .git/**
- node_modules/**
- .serverless
- .env
include:
- ./nCoVFunction.zip
environment:
variables:
TEST: vale
vpcConfig:
subnetId: ''
vpcId: ''
events:
- timer: //
name: timer
parameters:
cronExpression: '0 0 10,21 * * * *' // 10 , 21
enable: true
万事そろっていれば、SLSを直接配置することができます.
クラウドへの導入
slsコマンド(serverlessの略)で配置し、–debugパラメータを追加して配置中の情報を表示します.
taborchen$ sls --debug
DEBUG ─ Resolving the template's static variables.
DEBUG ─ Collecting components from the template.
DEBUG ─ Downloading any NPM components found in the template.
DEBUG ─ Analyzing the template's components dependencies.
DEBUG ─ Creating the template's components graph.
DEBUG ─ Syncing template state.
DEBUG ─ Executing the template's components graph.
DEBUG ─ Compressing function nCoVFunction file to /Users/taborchen/Desktop/ /yiqing/.ser
verless/nCoVFunction.zip.
DEBUG ─ Compressed function nCoVFunction file successful
DEBUG ─ Uploading service package to cos[sls-cloudfunction-ap-shanghai-code]. sls-cloudfunc
tion-default-nCoVFunction-1580960644.zip
DEBUG ─ Uploaded package successful /Users/taborchen/Desktop/ /yiqing/.serverless/nCoVFu
nction.zip
DEBUG ─ Creating function nCoVFunction
DEBUG ─ Created function nCoVFunction successful
DEBUG ─ Setting tags for function nCoVFunction
DEBUG ─ Creating trigger for function nCoVFunction
DEBUG ─ Created timer trigger timer for function nCoVFunction success.
DEBUG ─ Deployed function nCoVFunction successful
実行結果は次のとおりです.
これで、nCoVのオンライントリガ関数ロボットを完成させました~簡単ではないでしょうか.さあ始めよう~
転送ゲート:
おすすめ:
『Server lessアーキテクチャ:原理、設計からプロジェクト実戦まで』