DMMのアフィリエイト申し込んでwebサービスでID保存しとく
楽天アフィリエイト申し込んで楽天ウェブサービスでID保存しておく
twitterのなんかID取得しておく。
やることは
- DMMから無料本の情報取得
- Koboから無料本の情報取得
- 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例外インスタンスからエラーコードを取得します
結果をツイートしてる垢
よかったらフォローしておくんなまし
Follow @elve_comic