シンプルなエクスプレスサーバーとTwitterのAPI


我々は、与えられたユーザーから最近のつぶやき情報を得る簡単な急行サーバーを作成します.

必要条件:

  • あなたはTwitterの開発者アカウントを持つ必要があります.詳しくは
  • JavaScript の若干の知識
  • コマンドライン使用量
  • アプリケーションのフォルダを作成しましょう.
    mkdir TweetPuller
    
    では、フォルダ内のファイルをいくつか追加しましょう.
    cd TweetPuller
    touch .env index.js package.json
    
    基本的にパッケージ.JSON依存関係のような情報、アプリケーションの名前、説明、および起動スクリプトを保持します.では、パッケージをインストールしましょう.簡単な方法でJSON.

    パッケージ。JSON


    {
    "name": "TweetPuller",
    "version": "1.0.0",
    "description": "Pull Tweets",
    "main": "index.js",
    "engines": {
    "node" : "14.x"
    },
    "scripts": {
    "start": "node index.js"
    }
    }
    
    そうするべきだ.それから、我々も作成しました.環境変数を格納するenvファイル.秘密キーで作業している場合は、アプリケーションコードで公開する必要はありません.だから、基本的に、あなたの秘密キー/資格情報を格納することができます.envファイル.我々のケースでは、我々はあなたのTwitter開発者ポータルから取得するベアラートークンを格納します.そして、私たちがGithubの上でこのプロジェクトを発表するのを選んだ場合、私たちはGittignoreを使用してコミット中にこのファイルを無視します.

    env . env


    BEARER_TOKEN="XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"
    
    さあ、先に進んで、我々のアプリケーションで使用するいくつかの依存関係をインストールしましょう.一度これらの依存関係をインストールします.JSONが普及しつつある.だから、クールな滞在.
    npm install express dotenv needle
    
    我々は、Expressサーバーを作成しているので、expressをインストールしています.Expressは単なるノードです.Webアプリケーションフレームワーク.環境変数を取得するためにdotenvをインストールしています.envファイル.我々はTwitterのAPIの呼び出しを行うためにneedleをインストールしています.

    インデックス.js


    const express = require("express");
    const dotenv = require("dotenv");
    const needle = require("needle");
    
    
    const app = express()
    
    
    dotenv.config();
    
    //Get Bearer Token from .env 
    const BearerToken = process.env.BEARER_TOKEN;
    
    const endpointUrl = "https://api.twitter.com/2/tweets/search/recent";
    
    //Get Tweets from Twitter API
    const getTweets = async(id) => {
    
        const params = {
            'query': 'from:'+id+' -is:retweet',
            'tweet.fields': 'created_at',
            'expansions': 'author_id'
        }
        const response = await needle ('get', endpointUrl, params,{
            headers: {
                "User-Agent": "v2RecentSearchJS",
                "authorization": `Bearer ${BearerToken}`
            }
        })
    
        if (response.statusCode !== 200) {
            if (response.statusCode === 403) {
                res.status(403).send(response.body);
            } 
            else {
                throw new Error(response.body.error.message);
            }
        }
        if (response.body)
            return response.body;
        else
            throw new Error("Unsuccessful Request");   
    }
    
    //This returns the object to client
    const getTweetAnalysis = async(req, res) => {
        try {
            let twitterData =await getTweets(req.params.id);
            //res.send(twitterData);
            res.send(await analyze(twitterData));
        } catch (error) {
            res.send(error);
        }
    
    }
    
    //Simple Analysis
    const twitterObject = {}
    const analyze = async(twitterData) =>
    {
        twitterObject["username"] = twitterData.includes.users[0].username;
        twitterObject["name"] = twitterData.includes.users[0].name;
        console.log(twitterData.data[0].text)
        let averageCharacter = 0;
        let averageWord = 0;
        let totalCharacter = 0;
        let totalWord = 0;
        let texts = twitterData.data;
        if(texts)
        {
            for(let index =0 ; index < twitterData.data.length ; index++)
            {
                totalCharacter += texts[index].text.length;
                totalWord += texts[index].text.split(" ").length;
            }
        }
        if(twitterData.meta.result_count > 0)
        {
            twitterObject["usesActively"] =  true;
            averageCharacter = totalCharacter/twitterData.meta.result_count;
            averageWord = totalWord/twitterData.meta.result_count;
        }
        else
        {
            twitterObject["usesActively"] =  false;
        }
        twitterObject["averageWordCount"] = averageWord;
        twitterObject["averageCharacterCount"] = averageCharacter;
        return twitterObject;
    }
    
    //API route 
    app.get("/api/tweet/:id",getTweetAnalysis);
    
    //You can specify the port in .env file
    app.listen(process.env.PORT||3000,()=>
    {
        console.log('Currently Listening to the Server')
    })
    
    module.exports = app
    
    さて、我々が上記したことは、ユーザー名による最近のつぶやきを捜すために、検索つぶやきの1つを使用しました.そして、次に、ツイートを分析して、APIエンドポイントを通して若干の情報を提供するために、Expressサーバをつくりました.
    サーバーを実行するには、次のコマンドを実行します.
    npm start
    
    さて、クライアント側でこれをフックするか、Postmanのようなアプリケーションをサーバーをテストすることができます.

    エクストラチップ


    コードの変更を行うたびに、サーバーを再起動するようにnodemon依存関係をインストールできます.
    これをpackage.jsonのスクリプトに追加する必要があります.
    "start:auto": "nodemon index.js"
    
    次に、次のコマンドを実行します.
    npm run start:auto
    
    あなたは、getメソッドをゼロから使用して呼び出しを行う急行サーバーを構築することができます.
    次回は、データベースを使用してサーバを作成し、postdeleteの呼び出しを行います.
    また、Oshan Upreti Blogでこれを見つけることができます
    完全なコード

    押尾衆 / トワイパルラー