자멸 추문

나는 처음으로 소셜 미디어를 좋아하지 않는다는 것을 인정할 것이다.
내가 사랑하는 사람과 연락하는 것을 좋아하지 않고 그들의 생활을 따라갈 수 있는 방법이 있다는 것은 아니다.사실 우리의 꿈은 소셜미디어를 이용해 이 목표를 실현하는 것이다.
내가 소셜미디어를 좋아하지 않는 이유는 소셜미디어가 나에 대한 통제가 그것에 대한 통제보다 더 크기 때문이다.인정합니다.즐거우셨어요?
너는 내가 지나치게 낙관적이라고 말할 수 있지만, 나는 여전히 내가 그것을 어떤 방식으로 작용시킬 수 있다고 믿는다.그러나 그것을 나를 위해 일하게 하려면 약간의 조정이 필요하다.
페이스북과 인스타그램을 미세하게 조정하는 것은 이를 삭제하는 것을 의미한다.나는 6개월 전에 이렇게 했다.나는 페이스북 계정이 비즈니스와 광고 분야에서 하나의 사용 사례가 있을 것이라고 믿지만, 왜 내가 이 두 앱을 상업적인 목적으로 사용했는지 설명하기 위해 Occam의 면도기를 사용했기 때문에 기회를 주었다.
트위터는 정말 부정적인 소식일 수도 있지만, 나는 그곳에서 아주 중요한 통지를 받았다.트위터로 하고 싶은 것은 부정적인 영향을 최소화하고 가능한 한 앱에서 나의 역사적 흔적을 삭제하는 것이다.
이 과정을 시작하기 위해 간단한 트위터 로봇을 구축했습니다.cron 작업에서 실행되고, 7일이 넘는 트윗을 제 개인 자료에서 삭제합니다.
이 강좌에서, 나는 추문의 첫 번째 부분을 삭제하는 것을 보여줄 것이다.

선결 조건
  • 기본 노드 이해.
  • 기본적인 타자 이해.
  • 내가 올린 댓글을 읽어라.나는 그런 내용을 중복하지 않을 것이다.
  • 내가 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-tscDayJS를 시험해 보고 싶습니다. 왜냐하면 저는 아직 시험해 볼 기회가 없기 때문입니다!

    Dotenv 설정
    만약 선결 조건을 따랐다면, 계정 키를 가지고 있을 것입니다.
    올바른 변수의 키를 .env에 추가합니다.
    TWITTER_CONSUMER_KEY=
    TWITTER_CONSUMER_SECRET=
    TWITTER_ACCESS_TOKEN_KEY=
    TWITTER_ACCESS_TOKEN_SECRET=
    

    타자 스크립트, Nodemon을 설정하는 중입니다.제이슨과 가방.jsontsconfig.json에서 목표 노드의 수요를 알려 드리겠습니다.우리는 ES2020.Promiselib을 추가하고 있습니다. 그러면 우리는 Promise.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 Assistant 파일 만들기
    # 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 파일에서 국부 변수를 얻는 것입니다.
    그리고 저희는 두 가지 주요 기능.envgetUserTimeline이 있습니다. 이 기능들은 귀하의 계정에서 가장 많은 destroyMany 개의 트윗을 받은 다음에 각각 모든 트윗을 삭제합니다.
    이 함수들을 사용할 주 스크립트를 작성할 때가 되었다.

    극본을 쓰다n에 다음을 추가합니다.
    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)
      }
    }
    
    여기에서 우리는 src/index.ts 호출을 통해 최대 트윗 수 (200) 를 얻고 응답 데이터를 옮겨다니며 창설 날짜가 일주일보다 빠른지 확인하고 있습니다.만약 그렇다면, 우리는 그것을 getUserTimeline 수조로 보내고, 최종적으로 이 수조를 tweetsToDelete 에 전달한다.
    우리는 destroyMany 변수를 취소하고 어떤 요구가 충족되었는지 확인하고 트윗을 삭제했다.

    스크립트 실행
    스크립트 모드를 실행하려면 manyDestroyed(모니터링 모드에서 npm start와 함께 실행)합니다.이것은 Nodemon을 시작합니다. 성공하면 추문이 7일 이상 삭제되는 것을 볼 수 있습니다.
    만약 당신이 200여 번의 트윗을 보냈다면, 스크립트를 몇 번 다시 실행해야 할 수도 있습니다. 스크립트가 돌아올 때까지 더 이상 삭제할 내용이 없습니다.

    결론
    이것은 빠른 게시물이지만, 이것은 내가 어떻게 스크립트를 작성하여 일주일 이상의 추문을 삭제하기 시작했는지 개괄한다.
    여기서부터 나는 다른 트윗을 다시 검사하고 삭제하기 위해cron 작업을 매일 자정에 실행했다.
    트위터에 글을 올리는 것을 멈추고 소비를 하도록 격려해 주기를 바란다.트위터의 다음 단계는 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.트위터에서 나를 팔로우하고 숨겨진 보석을 더 많이 알아본다.

    좋은 웹페이지 즐겨찾기