古えのPHPで作成したtwitter botがAPI2に対応して動かないので、pythonで書き直そうと思い少しテストをしてみた。

ネット上に転がっているサンプルコードだと tweepyを使って、CSV読み込みにPandasを使っている事が多い。

ちなみに、2024年1月17日現在のConoha wingのpython関連のインストール済みモジュールは以下の通り

$ pip list
Package Version
certifi 2023.5.7
charset-normalizer 2.0.12
idna 3.4
oauthlib 3.2.2
pip 20.2.4
requests 2.27.1
requests-oauthlib 1.3.1
setuptools 38.5.2.post20200320
tweepy 4.6.0
urllib3 1.26.16

pip installでなんでもインストールできるみたいなことも書いてあったけど、エラーが出て調べるのも手間だしモジュールcsvで書いても大した手間ではないのでPandas使わないで書いた。
ちなみに設定されているPythonの2つのバージョンのうち新しい方は「3.6.15」

あと少しはまったのが、以下のコマンドを先に書いておかないと標準出力がutf-8に対応していなくて日本語の入った文字列を表示すると500エラーが出ること。

import sys
import io
sys.stdout = io.TextIOWrapper(sys.stdout.buffer, encoding=’utf-8′)

ConohaWingでPythonを表示すると500エラー!原因と解決策|LUCKLOG

話を戻して、割と一杯検索結果ページに出てくる

import pandas as pd

df = pd.read_csv(filepath, header=None).values.tolist()

import csv

with open(filepath, encoding=”utf8″, newline=””) as f:
csvreader = csv.reader(f)
df = [row for row in csvreader]

Pandasを使わずにcsvやtsvファイルを開く(open関数)|ぷんたむの悟りの書

で同等の処理になる。

テスト1
テスト2
テスト3
テスト4
テスト5
テスト6

というcsvを用意して実行すると(欠片もカンマ区切りではないですが)

[['テスト1'], ['テスト2'], ['テスト3'], ['テスト4'], ['テスト5'], ['テスト6']]

というリストに読み込まれるので

tweetstring=contents[1][0]

とすると2つめの要素

テスト2

が取得できる

この書き方すごいです

contents = [row for row in csvreader]

勉強になります