Severless+企業微信に基づいてnCoV疫情監視アシスタントを構築


最近のいくつかの疫病情報はとても心配で、みんなが疫病情報を把握するのを便利にするために、暇な間にnCoVに関する疫病監視のアシスタントをしました.主な機能は、企業の微信のWebHookを通じて疫病情報をプッシュすることだ.ここでは、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のオンライントリガ関数ロボットを完成させました~簡単ではないでしょうか.さあ始めよう~
転送ゲート:
  • GitHub: github.com/serverless
  • 公式サイト:serverless.com
  • ようこそ:Severless中国語ネットワークベストプラクティスでは、Server lessアプリケーションの開発をより多く体験できます.
    おすすめ:
    『Server lessアーキテクチャ:原理、設計からプロジェクト実戦まで』