데노에서 롤러로 스크랩을 던집니다.

18753 단어 Denotech
GWdeno에서 무엇을 할지 목표를 세웠기 때문에 간단하지만 슬랙 봇을 만들었다.

deno 설정


https://zenn.dev/azukiazusa/articles/804439f5afabe7#서버 설정
참고azukiazasa 기사Hello World!를 서버로 반납하면 문제없습니다.
vscode를 사용하는 사람은 확장 기능을 잘 추가하십시오. 오류가 발생했습니다.

완성품


https://github.com/CA-22-engineers/github_trending_repo

slack 채널에 텍스트 보내기


slack Token을 만들고 bot을 초대합니다.


일단 토큰을 가져올게요.
여기 기사.에서 보듯이 가져올 수 있을 거예요.
Token을 잘 사용할 수 있는지 확인하고 채널에 bot을 초대하세요.

코드


이쪽 코드를 참고했습니다.
기대고 싶지 않아서 다시 썼어요.
https://deno.land/x/[email protected]/src
connect_slack.ts
export const sendMessage = async(token: string, channel: string, text: string) => {
  const response = await fetch('https://slack.com/api/chat.postMessage', {
    method: 'POST',
    headers: {
      'Content-Type': 'application/json; charset=UTF-8',
      'Authorization': `Bearer ${token}`,
    },
    body: JSON.stringify({
      channel,
      text,
      as_user: true,
    }),
  });
  return response;
}
index.ts
import { sendMessage } from './connect_slack.ts';
import 'https://deno.land/x/dotenv/load.ts';

const slacktoken = Deno.env.get('SLACK_TOKEN')
if (slacktoken) {
  await sendMessage(slacktoken, '#チャンネル名', 'hello world!');
}
나는 별다른 일을 하지 않고 가져왔다slack_token.env
SLACK_TOKEN={とってきたslack_token}
이렇게 넣어주세요.
gitignore 설정 잘 해주세요.
$ deno run --allow-net --allow-read --allow-env index.ts
는 지정된 채널.env에 보내야 한다.
데노에 권한hello world! 등을 명확히 표시해야 한다.
https://deno.land/manual/getting_started/permissions

커튼으로 데이터를 추출하다


이번에 우리는 github 유행 트렌드 중의 창고를 선택했다.
https://github.com/trending
이것은 주의 사항이니 주의해 주십시오
나가사키 시립 중앙도서관 사건
웹 덮어쓰기 고려 사항 요약

코드


https://scrapingant.com/blog/deno-web-scraping
참고했어.
위의 보도document의 유형은ny이지만, 그러면 오류가 발생하여 움직일 수 없습니다.
github.ts
import { DOMParser } from 'https://deno.land/x/deno_dom/deno-dom-wasm.ts';

const url = 'https://github.com/trending';

let url_list: string[] = [];
const url_prefix = 'https://github.com/'
const res = await fetch(url);
const html = await res.text();
const doc = new DOMParser().parseFromString(html, 'text/html');
const ref = doc?.querySelector('#js-pjax-container>.position-relative>.Box');

export const scrapingRepo = (): string[] => {
  const repositories = ref?.querySelectorAll('div>.Box-row>h1>a');
  if (repositories) {
    for(const repositoty of repositories) {
      url_list.push(url_prefix + repositoty.textContent.replace('\n\n', '').replace(/\s+/g, '').trim())
    }
  }
  return url_list
}
나는 더 좋은 방법이 있을 것이라고 생각했지만, 이러한 느낌은 창고의 URL을 배열에 따라 반환했다.
Blocks로 보내려고 sendMessage 함수의 매개 변수를 변경합니다.
Block kitsPLAID 기사에 대해서는 쉽게 알 수 있습니다.
connect_slack.ts
export const sendMessage = async(token: string, channel: string, blocks: any) {}
slack.ts
import { sendMessage } from './connect_slack.ts';
import { scrapingRepo } from './github.ts';
import 'https://deno.land/x/dotenv/load.ts';

const array = await scrapingRepo()
const slacktoken = Deno.env.get('SLACK_TOKEN')
if (slacktoken) {
  for (let i = 0; i < 10; i++) {
    await sendMessage(slacktoken, '#bot_test',
    [
      {
        'type': 'context',
        'elements': [
          {
            'type': 'mrkdwn',
            'text': `No.${i+1} / ${array[i]}`
          }
        ]
      },
    ]
    );
  }
}
이렇게 다시 한 번 시도해서 슬랙에 보내면 됩니다.

프로그램 설계


얻기 힘든 기회니까 디자인하고 싶어요.
deno deploy스케줄러를 사용하고 싶어서 이번에 헤로쿠를 디자인하고 싶어요.
https://qiita.com/chibato/items/839e13ab09428dc1481c
이 보도에 따라 수정하고 미루다
https://qiita.com/Taro_man/items/2eab3e3acad88c5b759e
이 보도에 따라 일정을 설정하면 완성된다.
git를 만져봤으면 괜찮을 거야.

최후


deno는 처음으로 사용해 보았지만,ts를 건드린 사람이라면 문제 없이 쓸 수 있을 것 같습니다.
node_modules와 ts 없이 처음부터 사용할 수 있는 체험이 좋고, 후발 언어인 만큼 기준deno_lint 등이 있어 앞으로도 계속 사용하고 싶다.
만약 틀린 곳이 있으면 저에게 알려 주세요.

좋은 웹페이지 즐겨찾기