ThreadsをTypeScriptで操作してみる

皆さんThreadsやってますか？私も初日（7/6）に早速登録してみました。
![IMG_7110.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1593/d5465683-7590-81fb-e706-7ecdb9ccb7f5.png)

このThreadsをハックしてTypeScriptで使えるようにしたライブラリが早速登場した模様でビックリ。
https://github.com/junhoyeo/threads-api

ということで早速遊んでみました。まずはパッケージのインストール。npmでもyarnでもお好きなパッケージマネージャーでどうぞ。
```
MacBook:~ $ mkdir threads_test
MacBook:~ $ cd threads_test/
MacBook:threads_test $ npm install threads-api

added 131 packages, and audited 132 packages in 25s

35 packages are looking for funding
  run `npm fund` for details

found 0 vulnerabilities
```

TypeScriptを直接動かすにはts-nodeというのが必要なのでそちらもインストール。
```
MacBook:threads_test $ npm install --save-dev typescript ts-node

added 18 packages, and audited 150 packages in 9s

35 packages are looking for funding
  run `npm fund` for details

found 0 vulnerabilities
```

そこまでやったらthreads-apiのREADMEのソースをコピーして一部修正。
```
import { ThreadsAPI } from 'threads-api';

// or in Deno 🦖:
// import { ThreadsAPI } from "npm:threads-api";

const main = async () => {
  const threadsAPI = new ThreadsAPI();

  const username = 'hardreggaecafe';

  // 👤 Details for a specific user
  const userID = await threadsAPI.getUserIDfromUsername(username);
  if (!userID) {
    return;
  }
  const user = await threadsAPI.getUserProfile(username, userID);
  console.log(JSON.stringify(user));
  const posts = await threadsAPI.getUserProfileThreads(username, userID);
  console.log(JSON.stringify(posts));
  const replies = await threadsAPI.getUserProfileReplies(username, userID);
  console.log(JSON.stringify(replies));

  // 📖 Details for a specific thread
  const postID = await threadsAPI.getPostIDfromURL(
    'https://www.threads.net/t/CuWKab3S6mI/?igshid=NTc4MTIwNjQ2YQ==',
  );
  if (!postID) {
    return;
  }
  const post = await threadsAPI.getThreads(postID);
  console.log(JSON.stringify(post.containing_thread));
  console.log(JSON.stringify(post.reply_threads));

  const likers = await threadsAPI.getThreadLikers(postID);
  console.log(JSON.stringify(likers));
};
main();
```
usernameは自分のThreadsのアカウント名なので自明ですが、「Details for a specific thread」の特定のスレッドのURLはどう調べればいいのか？
スレッドの紙飛行機型
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1593/940ce18b-e218-6c9a-6bc7-731d7b570039.png)
のアイコンをクリックしてこれで出せます。
![IMG_7111.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1593/5ae3a5fd-3c68-3f51-dc55-0e72cedde280.png)

リンクをコピーで出せます。
iPhoneからMacだとコピーしたものはそのままペーストできますが、何かにメモってもいいかも。

これで実行した結果
```
MacBookAirForNori:threads_test takamizawanoriaki$ ./node_modules/.bin/ts-node test.ts
{"is_private":false,"profile_pic_url":"https://scontent.cdninstagram.com/v/t51.2885-19/358184609_303246119031060_6603713084272654825_n.jpg?stp=dst-jpg_s150x150&_nc_ht=scontent.cdninstagram.com&_nc_cat=100&_nc_ohc=0Mhro1IvNEkAX8AvBXa&edm=APs17CUBAAAA&ccb=7-5&oh=00_AfAAc0zIYT0lU4esaOTUA20JBYVaSGL0y2CvXNbU3ewEzg&oe=64AD942E&_nc_sid=10d13b","username":"hardreggaecafe","hd_profile_pic_versions":
[{"height":320,"url":"https://scontent.cdninstagram.com/v/t51.2885-19/358184609_303246119031060_6603713084272654825_n.jpg?stp=dst-jpg_s320x320&_nc_ht=scontent.cdninstagram.com&_nc_cat=100&_nc_ohc=0Mhro1IvNEkAX8AvBXa&edm=APs17CUBAAAA&ccb=7-5&oh=00_AfByUOVOw6zzhZ5h043Gv8QIMncMZeh5vjf-kfuG4vuELg&oe=64AD942E&_nc_sid=10d13b","width":320},
{"height":640,"url":"https://scontent.cdninstagram.com/v/t51.2885-19/358184609_303246119031060_6603713084272654825_n.jpg?stp=dst-jpg_s640x640&_nc_ht=scontent.cdninstagram.com&_nc_cat=100&_nc_ohc=0Mhro1IvNEkAX8AvBXa&edm=APs17CUBAAAA&ccb=7-5&oh=00_AfA_foLUbR2XRrjSwZ0u_ACkuV4OXpndOgbKX50ReYNm6A&oe=64AD942E&_nc_sid=10d13b","width":640}],"is_verified":false,"biography":"ONODERA INTERNET SERVICE新規事業担当\na.k.a Vegewel / Good Good Mart CTO","biography_with_entities":null,"follower_count":95,"profile_context_facepile_users":null,"bio_links":[],"pk":"888911","full_name":"高見沢 徳明","id":null}
・・・
```
など自分のプロフィールやら投稿したスレッドの情報が出てきます。
ぜひお試しを。