自己つぶやきつぶやき


私は、それを認める最初です.
私が愛しているものとつながっていて、彼らの生活についていく方法を持っているという考えを楽しむことが、私が楽しむというわけではありません.実際には、夢はそれだけのためのソーシャルメディアを使用することです.
ソーシャルメディアが好きでない理由は、ソーシャルメディアが私をコントロールしているということです.そこで私はそれを認めた.ハッピー?
私は過度に楽観的に呼び出しますが、私はまだどうにかそれを働かせることができると信じています.しかし、それは私のために働くためにいくつかの微調整を必要とする予定です.
FacebookやInstagramの微調整を削除することを意味.私は6ヶ月前にやった.私はFacebookのアカウントのためのビジネスケースや広告の理由のためのユースケースがあるだろうと確信していますが、OCCAMのレイザーを適用した理由は、私は両方のアプリケーションを使用した理由は、ビジネス目的のためではなかった、私はそれをフリック与えた.
Twitterに関しては、それは本当の否定的なナンシーでありえます、しかし、私はそこから本当に重要な通知の数を得ます.私はTwitterで何をしたいの負の最小化し、私ができるアプリから私の履歴の任意のトレースを削除します.
このプロセスを開始するには、私はcronジョブで実行されるシンプルなTwitterボットを構築し、私のプロファイルから7日以上前に任意のつぶやきを削除します.
このチュートリアルでは、つぶやきを削除する最初の部分を示します.

必要条件
  • 基本的なnodejs理解.
  • 基本的なスクリプトの理解.
  • 私のポストを読んでください.私はその内容を二倍にしないだろう.
  • 記事を読むUsing the AWS CDK to invoke a Lambda function during a cron job . 私は今日このチュートリアルでcronジョブの部分をカバーしません.
  • あなたの必要な資格情報Twit .

  • 始める
    新しいフォルダを選択し、次の手順を実行します
    npm init -y
    npm i twit dayjs
    npm i --save-dev @types/twit dotenv esbuild-node-tsc nodemon typescript
    mkdir src
    touch src/index.js tsconfig.json nodemon.json .env
    
    このチュートリアルではesbuild-node-tsc 私が先週オンラインとDayJS 私はまだそのいずれかを試してみる機会がなかったので!

    dotenvの設定
    前提条件に従った場合、アカウントキーがあります.
    正しい変数にキーを追加する.env :
    TWITTER_CONSUMER_KEY=
    TWITTER_CONSUMER_SECRET=
    TWITTER_ACCESS_TOKEN_KEY=
    TWITTER_ACCESS_TOKEN_SECRET=
    

    nodemonの設定JSONとパッケージJSON
    インtsconfig.json , 私たちは、それを目標ノード要件に伝えるつもりです.私たちはES2020.Promise 我々が利用できるように、libPromise.allSettled , しかし、あなたが使いたいならば、あなたはそれを残すことができましたPromise.all 代わりに、すべての拒否が結果として拒否されない場合、allSettled ).
    次のファイルに追加します.
    {
      "compilerOptions": {
        "target": "es2016",
        "module": "commonjs",
        "outDir": "./dist",
        "strict": false,
        "types": ["node"],
        "resolveJsonModule": true,
        "moduleResolution": "node",
        "noUnusedLocals": true,
        "noUnusedParameters": true,
        "noImplicitReturns": true,
        "noFallthroughCasesInSwitch": true,
        "esModuleInterop": true,
        "lib": ["ES2020.Promise"]
      },
      "include": ["src/**/*"],
      "exclude": ["node_modules", "**/*.test.ts"]
    }
    
    インnodemon.json , 我々は基本的にそれが実行されていると言うつもりですetsc ファイルがts 拡張.
    {
      "watch": ["src"],
      "ignore": ["src/**/*.test.ts"],
      "ext": "ts",
      "exec": "etsc && node ./dist/index.js",
      "legacyWatch": true
    }
    
    例えばpackage.json , スクリプトキーに以下を追加します.
    {
      "scripts": {
        "build": "tsc -p .",
        "start": "nodemon"
      }
    }
    
    Twitterのヘルパーファイルを作成する
    # from the root
    mkdir src/twitter
    touch src/twitter/index.ts
    
    インサイドsrc/twitter/index.ts , 次を追加します.
    import Twit from "twit"
    import { config } from "dotenv"
    // Init env vars from the .env file
    config()
    
    // Initialise our twitter client
    const client = new Twit({
      consumer_key: process.env.TWITTER_CONSUMER_KEY,
      consumer_secret: process.env.TWITTER_CONSUMER_SECRET,
      access_token: process.env.TWITTER_ACCESS_TOKEN_KEY,
      access_token_secret: process.env.TWITTER_ACCESS_TOKEN_SECRET,
    })
    
    // enum to prevent hardcoded string issues
    enum TwitterEndpoints {
      updateStatus = "statuses/update",
      destroyStatus = "statuses/destroy/:id",
      getUserTimeline = "statuses/user_timeline",
    }
    
    // Getting tweets from the user timeline
    type GetUserTimelineFn = (params?: Twit.Params) => Promise<Twit.PromiseResponse>
    export const getUserTimeline: GetUserTimelineFn = params =>
      client.get(TwitterEndpoints.getUserTimeline, params)
    
    // Destroy Many Tweets
    interface IDestroyManyParams {
      /* Tweet IDs */
      tweets: Twit.Twitter.Status[]
    }
    type DestroyManyFn = (
      params: IDestroyManyParams
    ) => Promise<PromiseSettledResult<Twit.PromiseResponse>[]>
    export const destroyMany: DestroyManyFn = ({ tweets }) => {
      const promiseArr = tweets.map(tweet =>
        client.post(TwitterEndpoints.destroyStatus, { id: tweet.id_str })
      )
      return Promise.allSettled(promiseArr)
    }
    
    このポストは、あなたが上記を理解することを期待します、しかし、それの長いと短いは、我々が使用しているということですdotenv ローカル変数を.env ファイル.
    次に、2つの主な機能getUserTimeline and destroyMany それはもう起きるn あなたのアカウントからのつぶやき、その後、すべてのそれらのつぶやきを破壊する.
    今、これらの関数を使用するメインスクリプトを書く時間です.

    メインスクリプトの作成
    インsrc/index.ts , 次を追加します.
    import dayjs from "dayjs"
    import { Twitter } from "twit"
    import { getUserTimeline, destroyMany } from "./util/twitter"
    
    type UserTimelineResponse = {
      data: Twitter.Status[]
    }
    
    export const main = async () => {
      try {
        // casting as typing Twit.Response gives incorrect data structure
        const res = (await getUserTimeline({ count: 200 })) as UserTimelineResponse
    
        const tweetsToDelete = []
        for (const tweet of res.data) {
          if (dayjs(tweet.created_at).isBefore(dayjs().subtract(7, "day"))) {
            tweetsToDelete.push({
              text: tweet.text,
              id_str: tweet.id_str,
            })
          }
        }
    
        const manyDestroyed = await destroyMany({
          tweets: tweetsToDelete,
        })
        console.log(manyDestroyed)
      } catch (err) {
        console.error(err)
      }
    }
    
    ここで我々は最大のつぶやきの数を得るために待っているgetUserTimeline そして、作成された日付が1週より古いならば、わかるように、応答データを繰り返してください.それがそうであるならば、我々はそれをAに押していますtweetsToDelete を返します.destroyMany .
    私たちはmanyDestroyed 変数は、要求が実現され、つぶやきを削除した参照してください.

    スクリプトの実行
    スクリプトモードを実行するには、npm start と共に走るnodemon を参照).これはnodemonを開始し、成功した場合、あなたのつぶやきを削除するために開始7日以上古い表示されます!
    あなたが200回以上つぶやいたならば、それがもう二度と削除することで来ないまで、あなたはもう一度何度もスクリプトを走らせる必要があるかもしれません!

    結論
    これは簡単な火災ポストだったが、私はどのように私は1週間以上の私のつぶやきを削除を開始するスクリプトを書いたの概要だった!
    ここから移動すると、私はcronの仕事を毎日ミッドナイトで再チェックし、他のつぶやきを削除する実行を設定します.
    私は本当にこれがインスピレーションを与える(私は緩慢な用語)Twitterで投稿を停止し、消費するために使用することを期待しています.Twitterとの私の次の動きは、いくつかのML/AIを使用して私のフィードにつぶやきをフィルタリングするものを追加することです.

    資源と更なる読書

  • Using the AWS CDK to invoke a Lambda function during a cron job
  • Twit - GitHub
  • esbuild-node-tsc - GitHub
  • DayJS - GitHub
  • イメージ信用:Patrick Perkins
    もともと私の投稿blog . より隠された宝石のTwitter上で私に従ってください.