スナックelve 本店

バツイチ40代女の日記です

phpを捨てて僕は走り出す、pythonと

また後で検索しにくいタイトルにしてしまったwww

ほら、phpAPI叩いて情報取得できたので、phpのページ作って、そこにアクセスすると

情報取得

ファイルに保存

ファイルを読み込み

ツイート

って処理するのを作ろうと思ったわけよ。
なんで情報取得ですぐツイートしないかって? んと・・・なんかアレだよ・・・。えーっと・・・。
あ、そうそう、ほら、ファイルに保存するところをアフィリエイトサイトごとに作れば、ツイートの部分は共有できると思ったんやね。*1
後ファイルに保存して取っておけたら後々面白いかも? そうでもない?

で、ツイートする部分を作ろうと思ったんですけどもね・・・認証がなんか・・・。
developer.twitter.com
もう何一つわからん

13時位までは多分phpのことを調べていたんすが・・・分かんねぇな、こりゃ、と。ニンゲン諦めも肝心ですよね。
途中でpostmanとかってアプリも入れたけどさっぱりわからんかった。日本語・・・わしゃ日本語にうえておるんじゃ・・・。

コピペで行けるよ、そう、Pythonならね
di-acc2.com

ありがとうございます。tweepy神!!!
あとtwitter側でもちょっと設定しないと。

よくわからんけどコールバック関数とか埋めて、Access Token、Access Token Secretをゲットするんじゃ(吐血)
zenn.dev

URL入れるところは全部twitterのURL入れたわ・・・。わからん。

ソース

はい、コードです。
基本的に期間限定とタイトルに入っているモンを検索して、0円のだけ保存してます。
実行するたびに出力ファイルクリアするので注意。
保存する時ほっておくと文字コードが確かSーJISだったのでちゃんと指定してあげてね。

DMMブックス読み込み

これは新しい方から100件取得してますね・・・(統一性がないw)

from ast import Return
import requests
import urllib.parse
import json

f = open('./freeComicInfo.json', 'w', encoding='utf-8')
f.close()

reqUrl = "https://api.dmm.com/affiliate/v3/ItemList?"
para = {
    "api_id": "vVgTxSx9WSzUSKGXCsZt",
    "affiliate_id": "elve-990",
    "site": "DMM.com",
    "service": "ebook",
    "floor": "comic",
    "hit": 100,
    "sort": "date",
    "keyword": "期間限定"
}
urlPara = urllib.parse.urlencode(para)

r = requests.get(reqUrl + urlPara)
if r.ok:
    ret = r.json()
    jsonItem = []
    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"] + "先生"
            str = "{0}の『{1}』{2} 今 {3}円".format(
                sakusya, item["title"], item["number"], item["prices"]["price"])
            print(str)
            url = item["affiliateURL"]
            jsonItem.append({'str': str, 'url': url})
    jsonItems = {'items': jsonItem}

with open('./freeComicInfo.json', 'a', encoding='utf-8') as f:
    json.dump(jsonItems, f, ensure_ascii=False)

んー無料お試しじゃなくて期間限定でちゃんと読めるやつ取りたいなぁ

楽天コボ

こっちは何順のソートなんだろ? よくわからんスタンダードw
maxが30件だったので30件取ってます。

from ast import Return
import requests
import urllib.parse
import json

f = open('./freeComicInfo.json', 'w', encoding='utf-8')
f.close()

reqUrl = "https://app.rakuten.co.jp/services/api/Kobo/EbookSearch/20170426?"
para = {
    "applicationId":"1077688777613086627",
    "affiliateId":"05eff714.c5ceaa1a.05eff716.192055f2",
#    "elements":"title,author,affiliateUrl",
    "formatVersion":2,
    "koboGenreId":"101904",
    "keyword": "期間限定",
    "hits":30,
    "sort":"standard",

}
urlPara = urllib.parse.urlencode(para)
print(reqUrl + urlPara)
r = requests.get(reqUrl + urlPara)
if r.ok:
    ret = r.json()
    jsonItem = []
    for item in ret["Items"]:
        if item["itemPrice"] == 0:
            sakusya = item["author"] + "先生"
            str = "{0}の『{1}』今{2}円".format(
                sakusya, item["title"], item["itemPrice"])
            print(str)
            url = item["affiliateUrl"]
            jsonItem.append({'str': str, 'url': url})
    jsonItems = {'items': jsonItem}

    with open('./freeComicInfo.json', 'a', encoding='utf-8') as f:
        json.dump(jsonItems, f, ensure_ascii=False)

精度的にどうなんでしょうなぁ?(;´Д`)



ツイートする部分

#https://di-acc2.com/system/rpa/9748/

from nturl2path import url2pathname
import tweepy
from pprint import pprint
import schedule
from time import sleep
import json
# API情報を記入
BEARER_TOKEN = "なんか長いやつ"
API_KEY = "ちょい短め"
API_SECRET = "50文字くらい?"
ACCESS_TOKEN = "50文字くらい?"
ACCESS_TOKEN_SECRET = "50文字くらい?"


# クライアント関数を作成
def ClientInfo():
    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):
    tweet = ClientInfo().create_tweet(text=message)
    return tweet

# 関数実行・結果出力
# pprint(CreateTweet(message))


with open('./freeComicInfo.json', encoding='utf-8') as f:
    readJson = json.load(f)
    for item in readJson["items"]:
        m = item["str"] + "\n" + item["url"]
        CreateTweet(m)

参考

【Python×Twitter】自動ツイート(投稿)を定期実行する方法|APIとtweepyを用いたbot開発支援
[解決!Python]エンコーディングを指定して、シフトJISなどのファイルを読み書きするには:解決!Python - @IT
PythonでJSON出力する際、日本語が文字化けする件 - Qiita
Pythonの辞書(dict)に要素を追加する方法まとめ | HEADBOOST
[解決!Python]リスト(配列)に要素を追加するには(+演算子/+=演算子/append/extend/insertメソッド):解決!Python - @IT
【Python入門】インクリメント演算子は使えない!?対処法まとめ | 侍エンジニアブログ
Python | 数値を文字列に変換して文字列と連結する
【Python】TypeError: string indices must be integers, not str - S氏はたまにblogを更新してます
Pythonで定数を定義する方法を現役エンジニアが解説【初心者向け】 | TechAcademyマガジン
【Python】文字列に変数を入れて文字列を動的に変更させる(format、f_strings) | OFFICE54
Pythonでファイルの読み込み、書き込み(作成・追記) | note.nkmk.me
JSONで配列の入れ子構造や値の取得方法などをPythonを使って説明! | 侍エンジニアブログ
【Python】open()のmodeについて - プログラミング勉強の備忘録
【Python入門】foreachをPythonで使ってみよう - Qiita
Python | if文を使った条件分岐
PythonでURLのクエリ文字列(パラメータ)を取得・作成・変更 | note.nkmk.me
【Python】jsonファイルを出力する | 鎖プログラム
PythonでURLエンコード・デコード(urllib.parse.quote, unquote) | note.nkmk.me
PythonでWeb APIを叩く - Qiita
Ruby、PHP、Python、JavaScriptの特徴とコードを比較してみた(言語選定と言語チェンジのための参考資料) - Qiita
【Python×Twitter】自動ツイート(投稿)を定期実行する方法|APIとtweepyを用いたbot開発支援
【Python】Scheduleモジュールを用いたイベント定期実行|指定時間動作のスケジュール関数作成例と使い方解説
Python で副業(?) Twitter API を使ってみる 〜その2:OAuth 2.0 で Twitter API curl で取得〜 - akiblog

*1:こういうのはおおよその勘で動き始めますよねw