1分おきに期間限定無料の漫画をツイートする

DMMのアフィリエイト申し込んでwebサービスでID保存しとく
楽天アフィリエイト申し込んで楽天ウェブサービスでID保存しておく
twitterのなんかID取得しておく。

やることは

  1. DMMから無料本の情報取得
  2. Koboから無料本の情報取得
  3. 1分おきにツイート
  • 生成時のツイート用情報はt_yyyymmddhhmm_ストア名__freeComicInfo.jsonに保存される。
  • ツイート後はyyyymmddhhmm_ストア名__freeComicInfo.jsonにリネームする
import requests
import urllib.parse
import json
import datetime
from twitter_text import parse_tweet
from os import rename
import glob
import json
from time import sleep
import tweepy
# ファイル名生成
def getFilename(kind):
# 今の日時からファイル名を作成
dt_now = datetime.datetime.now()
fName = 't_'+dt_now.strftime('%Y%m%d%H%M%S') + \
'_' + kind+'_freeComicInfo.json'
f = open('./'+fName, 'w', encoding='utf-8')
f.close()
return fName
# urlパラメータ生成
def getApiUrl(reqUrl, para):
urlPara = urllib.parse.urlencode(para)
return reqUrl + urlPara
# 結果文字列の整形
def editFreeBookData(url, kind, sakusya, title, number, jsonItem):
str = '【{0}】{1}の『{2}』{3} 今 0円'.format(kind, sakusya, title, number)
# jsonの枝(item)作成
jsonItem.append({'str': str, 'url': url})
return jsonItem
# ファイル保存
def saveFile(jsonItem, fName):
# json追加
jsonItems = {'items': jsonItem}
# ファイルに保存
with open('./'+fName, 'a', encoding='utf-8') as f:
json.dump(jsonItems, f, ensure_ascii=False)
# API情報を記入
BEARER_TOKEN = ''
API_KEY = ''
API_SECRET = ''
ACCESS_TOKEN = ''
ACCESS_TOKEN_SECRET = ''
# クライアント関数を作成
def ClientInfo():
print("tweet2")
client = tweepy.Client(bearer_token=BEARER_TOKEN,
consumer_key=API_KEY,
consumer_secret=API_SECRET,
access_token=ACCESS_TOKEN,
access_token_secret=ACCESS_TOKEN_SECRET,
)
return client
# ツイート関数
def CreateTweet(message, client):
print("tweet1")
try:
tweet = client.create_tweet(text=message)
return tweet
except tweepy.TweepError as e:
print(e.message[0]['code'])
print(e.args[0][0]['code'])
return
def tweetFiles():
# 対象ファイル取得(t_で始まるファイル)
targetFiles = glob.glob('./t_*.json')
for tFile in targetFiles:
with open(tFile, encoding='utf-8') as f:
# jsonからitemsを読み込み
readJson = json.load(f)
for item in readJson['items']:
# itemごとに処理
# urlは切れたら困るから最初に
m = item['url'] + '\n' + item['str']
if parse_tweet(m).valid == False:
# 文字が長過ぎたら切り詰めていく
i = 280
while parse_tweet(m).valid == False:
m = m[:i]
i -= 1
# 最後は省略の「…」
i -= 2
m = m[:i] + '…'
print(m)
# ツイート
CreateTweet(m)
# 60秒待つ
sleep(60)
# 処理済みファイルの「t_」を削除
nfilename = tFile[4:]
rename(tFile, nfilename)
# メイン処理
kinds = ['DMMブックス', '楽天Kobo']
reqUrls = ['https://api.dmm.com/affiliate/v3/ItemList?',
'https://app.rakuten.co.jp/services/api/Kobo/EbookSearch/20170426?']
paras = [{
'api_id': 'vVgTxSx9WSzUSKGXCsZt',
'affiliate_id': 'elve-990',
'site': 'DMM.com',
'service': 'ebook',
'floor': 'comic',
'hit': 30,
'offset': 1,
'keyword': '閲覧期限'
}, {
'applicationId': '1077688777613086627',
'affiliateId': '05eff714.c5ceaa1a.05eff716.192055f2',
'elements': 'title,author,affiliateUrl,itemPrice',
'formatVersion': 2,
'koboGenreId': '101904',
'keyword': '期間限定',
'hits': 30,
'sort': 'reviewCount',
'page': 1
}]
for i in range(len(kinds)):
fName = getFilename(kinds[i])
# apiを叩く
r = requests.get(getApiUrl(reqUrls[i], paras[i]))
if r.ok:
ret = r.json()
jsonItem = []
# OKだったら/ここはapi分岐するしかない?
if kinds[i] == 'DMMブックス':
for item in ret["result"]["items"]:
if item["prices"]["price"] == 0:
authors = item["iteminfo"]["author"]
sakusya = ""
for author in authors:
if sakusya == "":
sakusya = author["name"] + "先生"
else:
sakusya += "、" + author["name"] + "先生"
editFreeBookData(
item["affiliateURL"], kinds[i], sakusya, item["title"], item["number"], jsonItem)
saveFile(jsonItem, fName)
elif kinds[i] == '楽天Kobo':
for item in ret["Items"]:
if item["itemPrice"] == 0:
sakusya = item["author"] + "先生"
editFreeBookData(
item["affiliateUrl"], kinds[i], sakusya, item["title"], "", jsonItem)
saveFile(jsonItem, fName)
# 対象ファイル取得(t_で始まるファイル)
targetFiles = glob.glob('./t_*.json')
client = ClientInfo()
for tFile in targetFiles:
with open(tFile, encoding='utf-8') as f:
# jsonからitemsを読み込み
readJson = json.load(f)
for item in readJson["items"]:
# itemごとに処理
# urlは切れたら困るから最初に
m = item["url"] + '\n' + item["str"]
# 文字が長過ぎたら切り詰めていく
i = 278
m = m[:i] + "…"
print(m)
# ツイート
CreateTweet(m, client)
# 60秒待つ
sleep(60)
# 処理済みファイルの「t_」を削除
nfilename = tFile[4:]
rename(tFile, nfilename)

参考

[解決!Python]バイナリファイルを読み書きするには:pickle編:解決!Python – @IT
[解決!Python]日付や時刻をYYMMDDhhmmssなどの形式に書式化するには:解決!Python – @IT
Python の例外を別の例外として投げるときの話 – サーバーワークスエンジニアブログ
Pythonの2次元配列の使い方!初期化、追加、検索方法まとめ | プログラミングを学ぶならトレノキャンプ(TRAINOCAMP)
【Python】Scheduleモジュールを用いたイベント定期実行|指定時間動作のスケジュール関数作成例と使い方解説
pickle — Python オブジェクトの直列化 — Python 3.10.6 ドキュメント
【Python】 f-stringの使い方の基本 | Hbk project
Pythonで現在時刻・日付・日時を取得 | note.nkmk.me
Pythonで文字列を分割(区切り文字、改行、正規表現、文字数) | note.nkmk.me
Pythonの例外処理(try, except, else, finally) | note.nkmk.me
pythonでtwitterが扱えるtweepyについて【サンプルコードあり】|python-manブログ
pythonでtwitterが扱えるtweepyについて【サンプルコードあり】|python-manブログ
Python で文字列に変数を埋め込む方法あれこれ – Qiita
Pythonで文字列 <-> 日付(date, datetime) の変換 – Qiita
Pythonでglobモジュールを使う方法【初心者向け】現役エンジニアが解説 | TechAcademyマガジン
python for文を初心者向けに解説!for文基礎はこれで…|Udemy メディア
Python|Udemy メディア
Python3入門 フォルダ内のファイル一覧を取得する方法
Python の辞書の配列またはリスト | Delft スタック
Python | ファイル名またはディレクトリ名を変更する
Python | if文を使った条件分岐
Python | formatメソッドを使った文字列の書式設定
【Python入門】os.renameでファイル名を変更する方法を解説! | 侍エンジニアブログ
python — tweepy例外インスタンスからエラーコードを取得します

結果をツイートしてる垢

よかったらフォローしておくんなまし

どのくらい面白かった?

星を押して送信してね

平均 0 / 5. Vote count: 0

是非フォローしてください

最新の情報をお伝えします

コメントする

メールアドレスが公開されることはありません。 が付いている欄は必須項目です