Help us understand the problem. What is going on with this article?

DenoでTwitter API Clientを作ってみた話

Deno Advent Calendar 15日目の記事です!

Advent Calendar初投稿で拙いかもしれませんがご了承ください…

Deno とは

たぶん皆さん解説されていると思うので、簡単に言うと、

node.js開発者による上位互換Javascript・typescriptランタイム

です!(若干語弊があるかも...)

Twitter API client 作るきっかけ

最近、Denoちゃんが好きになってきて、DenoでTwitter Bot作りたいなぁと思ってました。

いざ作ろうと思うと、「直接fetch叩かんとあかん系?」って感じで、扱いにくかった。

どうせなら、自分で作っちゃう?

ということで、Twitter API clientを作ることになりました。

Twitter API client for Deno

Github source

Githubにソースコードを上げたので、置いておきます。
Github pagesにて公開もしているので、URL使ってモジュールインポートできます。

使ってみよう!

いくつかコード例を挙げておきます。

Bearer Token 取得

Bearer Tokenとは・・・
Twitter API v2(Early access)などで誰でも見られる情報(ツイートとかユーザーとか)を取得するとき、OAuth1.1a認証を使わずに、Bearer Tokenと呼ばれるトークンをAuthorizationヘッダーに付けることでAPIを使用できるもの。

Bearer Token自体は、Twitter developerサイトや、基本認証でapiKeyapiSecretKeyを指定のURLに送信することで得られます。

ここでは、apiKeyapiSecretKeyを使用してbearerTokenを取得するコードを書いておきます。

import { getBearerToken } from "https://kamekyame.github.io/twitter_api_client/auth/oauth2.ts";

const apikey = "" // apikey
const apisecletkey = "" // apisecletkey

const bearerToken = await getBearerToken(apikey, apisecretkey);

ツイート取得(api_v2/tweets/lookup)

import { getTweet } from "https://kamekyame.github.io/twitter_api_client/api_v2/tweets/lookup.ts";

const bearerToken = ""; // bearerToken

const res = await getTweet(bearerToken,"1067094924124872705"/*,option*/);

指定した検索条件にマッチするツイートのストリーミング(api_v2/tweets/filtered_stream)

※事前に検索条件(ルール)の登録が別途必要

import { connectStream ,StreamTweet} from "https://kamekyame.github.io/twitter_api_client/api_v2/tweets/filtered_stream.ts";

const bearerToken = ""; // bearerToken

async function callback(a: StreamTweet) {
  console.log(a);
}

connectStream(bearerToken, callback);

ツイート投稿(api_v1/tweets/lookup)

「hello world!」という文をツイート

import { statusUpdate } from "https://kamekyame.github.io/twitter_api_client/api_v1/tweets/update.ts";

await statusUpdate({
  consumerKey: "",
  consumerSecret: "",
  token: "",
  tokenSecret: "",
}, {
  status: "hello world!",
});

Twitter API client for Deno 利用に関する注意点

  1. Twitter API v2(Early access)を使用する際には、v2が使えるようになんかDeveloper portalで設定しないといけないようです。 (調べたけどやり方が出てこなかった...。僕はどうやってやったんだろ...)
  2. 個人で使うために作ったモジュールなので、作り方が甘いところがあるかもしれません。
  3. 個人が使うために作ったモジュールなので、使いたいAPIのみしか作成できていません。

まだ未完成(o^―^o)

このモジュールは、まだまだ未完成です。ぜひ、この記事を見て使ってみたいけど、欲しいAPIが実装されてない!!!って方いらっしゃいましたらissueに書き込むか、自分で作ってプルリクしてください。

皆様のご協力お願いしますm(__)m(これをするためにAdvent Calender登録したっていうのもw)

また、バグ報告、より良いプログラム・アルゴリズム等ありましたらissue、プルリクでお願いします。

今後の展望

  • 全部のAPI作る
  • クラスにまとめて、もっと簡単に、直感的に使えるようにする
  • 例外処理をきちんとする(今は特にしていない)

などを考えてます。

最後に

最近なにかと話題のDeno。ぜひDeno界隈を盛り上げて、npmをも超えるモジュール群を作り上げましょう!!!

Advent Calender初参加。うまく書けたかな。こんな記事でいいのかなと思いながらの執筆。
コメント等もお待ちしております!
Qiitaの記事には絶対コメントを書いてはいけない (わけがない)←ほかの人の記事ですが…

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away