Bluesky と Twitter で arXiv bot を作った

- [0. はじめに](#0-はじめに)
- [1. Bluesky API](#1-bluesky-api)
- [2. arXiv](#2-arxiv)
- [3. cron](#3-cron)
- [4. Twitter API](#4-twitter-api)
  - [登録](#登録)
  - [認証](#認証)
- [n. おわりに](#n-おわりに)

<!-- Bluesky と Twitter で arXiv bot を作った -->

# 0. はじめに

* Bluesky で arXiv Bot を作ります。
* Twitter で arXiv Bot を作ります。

それでは、レッツゴー！

# 1. Bluesky API

Bluesky API は登録と同時に自動的に使えます。

Get Started | Bluesky  
https://docs.bsky.app/docs/get-started 

> BlueskyのAPIを試してみる #API - Qiita  
> https://qiita.com/koyukitukimino/items/ff0f75e86fc7cf7a5124 

簡単。ログインはID とパスワードでこうやってやる。

```python
def bsky_login(category):
    # password
    p = read_password(category)
    # login
    client = Client(base_url='https://bsky.social')
    client.login(login='krxiv-' + category + '.bsky.social',password=p)

    # set a image 
    with open('img/ArXiv_logo_2022.png', 'rb') as f:
        img = f.read()
    thumb = client.upload_blob(img)
    return client, thumb
```

簡単。

# 2. arXiv

arXiv の締切や更新予定日時は公開されています。

> localtime at arxiv.org  
> https://arxiv.org/localtime 

現状

```
gr-qc
hep-th
math-ph
quant-ph
hep-ph
```

のカテゴリーをサポートしています。

> 保証はできかねますが、追加してほしいカテゴリーがあったらご一報ください。

# 3. cron

cron で平日12時にコードを走らせます。

```
SHELL=/bin/zsh
0 12 * * 1-5 cd ~/arxiv_bot ; /bin/sh run.sh
```

(/bin/sh はとりあえず消してない)

コードの中身は [GitHub](https://github.com/Krypf/arxiv_bot) においてあります。

# 4. Twitter API

Bluesky bot が目標期限内の8月に出来上がったので、余力で Twitter bot も作ってみる。

## 登録

Twitter で Developer 登録をします。~~もちろんフリープラン~~。アカウントは新しく作ります。~~はっきり言ってロボットではない証明あたりがステップ数ありすぎて超絶イライラする~~

macOS の Safari で登録するとスムーズに行きました。メアド認証がうまくいかないときは、再送を繰り返してください。

アカウント作成 / Twitter  
https://twitter.com/i/flow/signup?lang=ja 

X Developers  
https://developer.x.com/en/portal/petition/essential/terms?plan=free 

参考→  
> 2023年版 Twitter API v2を無料で叩く (OAuth 2.0 with PKCE)  
> https://zenn.dev/nyancat/articles/20230803-twitter-api-oauth2-pkce 

目的は下のように書いた。

> The project aims to develop an arXiv bot utilizing the Twitter API to automatically post updates on newly published scientific papers in specific categories, such as hep-th, hep-ph, or gr-qc. The bot will enhance scientific outreach by making recent research more accessible to the community, enabling researchers and enthusiasts to stay informed about the latest advancements in their field. The bot will filter papers based on keywords, topics, or authors, and tweet summaries or links to these papers in real-time. This tool is intended to support the dissemination of scientific knowledge and foster academic collaboration.

GPT、最高。

## 認証

~~憎き Elon Musk のせいで~~ ク◯めんどくさい認証をくぐり抜けながら ツイートを通します。

0. Key や Token は適宜 regenerate する。必ずメモする。
1. Developer Portal に Twitter account を登録する。（さっきやった）
2. API v1.1 のコードは基本的に使えなくなっているので v2 のコードにする。（~~Elon Musk のせい~~） 
3. `User Authentication settings < Settings < 番号 < Default-Project < Project & Apps` を save する。権限は `Read & Write` にする（"Access Token and Secret"を (re)generate する）
4. `Keys and tokens < 番号 < Default-Project` で Key や Token を generate する。
5. 投稿する。

2 をしないと以下のようなエラーが出ます。

> Error occurred: 403 Forbidden
453 - You currently have access to a subset of Twitter API v2 endpoints and limited v1.1 endpoints (e.g. media post, oauth) only. If you need access to this endpoint, you may need a different access level. You can learn more here: https://developer.twitter.com/en/portal/product

3 をしないと以下のようなエラーが出ます。

> Error occurred: 403 Forbidden
Your client app is not configured with the appropriate oauth1 app permissions for this endpoint.

参考サイト

1. X Developers  
https://developer.x.com/en/portal/petition/essential/terms?plan=free 

1. 
   1. Twitter APIs Error Python: You currently have access to a subset of Twitter API v2 endpoints and limited v1.1 endpoints (e.g. media post, oauth) only - Stack Overflow https://stackoverflow.com/questions/76744593/twitter-apis-error-python-you-currently-have-access-to-a-subset-of-twitter-api 
   1. 古いの使ってて勝手に勘違いしていた話。｜あさぶろ https://note.com/furokun/n/n5cfadf6027bb 
   2. PythonTweepy oauth1 - X API / X API v2 - X Developers https://devcommunity.x.com/t/pythontweepy-oauth1/189150 
   3. 【Twitter API Errorcode:453】TweepyをAPIv2で利用する | ClassyNode https://classynode.com/2023/07/apply_twitter_apiv2/ 

2. 
   1. performance - errors when trying to tweet using tweepy - Stack Overflow https://stackoverflow.com/questions/74436471/errors-when-trying-to-tweet-using-tweepy 
   2. 【2022年 10月更新】よくわかる「Twitter API」-申請編- | ENT+（エントプラス） https://ent-plus.com/twitter-api-request/ （「User Authentication settings」でユーザー認証を編集しよう！）
   3. App permissions | Docs | Twitter Developer Platform https://developer.x.com/en/docs/apps/app-permissions 


stackoverflow, 最高ーーー


ログインは4つの文字列を使ってこのようにします。

```python
import tweepy

def twitter_login(category):
    # Load the credentials into a dictionary
    credentials_dict = load_credentials(category)

    # Authenticate to Twitter
    client = tweepy.Client(
        consumer_key=credentials_dict['API Key'],
        consumer_secret=credentials_dict['API Key Secret'],
        access_token=credentials_dict['Access Token'],
        access_token_secret=credentials_dict['Access Token Secret']
    )
    return client
```

# n. おわりに

* Bluesky で arXiv Bot を作りました。
* Twitter で arXiv Bot を作りました。

お気づきかと思いますが、Twitter のことは X と呼ぶつもりはありません。