現在「完了」、進捗 60%。工程は全18件中 18件完了。
最新報告「JANet 2重登録対応」(2023-10-05 08:25:33)
Valuecommerce のみ取得が不安定のためAPIを使用を試す
サイト数:16サイト
注文別レポートAPIリファレンス(アフィリエイトサイト向け)
https://pub-docs.valuecommerce.ne.jp/docs/as-78-order-report-api/
トークン取得APIリファレンス(アフィリエイトサイト向け)
https://pub-docs.valuecommerce.ne.jp/docs/as-77-token-api/
中田
if day_of_month == 1:
try:
driver.find_element_by_css_selector('#report > section > div.sort_box > dl:nth-child(1) > dd:nth-child(6) > p > a:nth-child(2)').click()
time.sleep(1) # クリック後に待機(必要に応じて)
except:
pass
driver.find_element_by_css_selector('#search_btn').click()
中田
slnm_janet2.pyでテスト中
https://j-a-net.jp/login?error_type=wrong_id_pass
body > div.flex-wrapper > div.flex-wrapper__login-form > main > div > div.login-form__content > div.login-form__button > div > button
↓
全部消す
日付入力
2023-09-03
全部消す
日付入力
2023-09-0
クリック
中田
Webhook URL:
https://hooks.slack.com/services/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
中田
Webhook URLの取得方法:
1.アプリ追加で、"Incoming Webhook"と検索してください。
https://gyazo.com/58b279ab0c2616b3fc24de77fc3057bf
2."Incoming Webhook"をSlackに追加してください。
https://gyazo.com/1444693964865748532254fa6a577c63
3.メッセージを送信したい"チャンネルを選択"→"Incoming Webhook インテグレーションの追加"をクリックしてください。
https://gyazo.com/d577abf0e53a56bd47522eec2c1448ec
4."Webhook URL"をコピーして共有をお願いします。
https://gyazo.com/a2f10c08ce5b61db839bb39c0c38bd34
Webhook URLとは:
自動的にデータを送信するためのインターネット上のエンドポイント(URL)
*/
define("WEBHOOK_URL","https://hooks.slack.com/services/T0563L71VP1/B05Q12KQ3GC/XXXXX");
function send_to_slack($message) {
$webhook_url = WEBHOOK_URL;
$payload = json_encode(array("text" => $message));
$ch = curl_init($webhook_url);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST");
curl_setopt($ch, CURLOPT_POSTFIELDS, $payload);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, array(
'Content-Type: application/json',
'Content-Length: ' . strlen($payload))
);
curl_exec($ch);
curl_close($ch);
}
$message="送りたいメッセージ";
send_to_slack($message);
中田
Slackへメッセージ送信ファイル見本
https://plus-creative.xyz/nakata/asp_reward/slack.php
中田
設定内容は...
X-serverにplus-x9サーバのアカウントにログイン→Cronの設定という流れ
Cronで指定時間に繰り返し実行するプログラムとなります。
asp_rewarda/slack.php
というファイルのプログラムを動作させます。
→ログイン後、サーバパネルからCron設定画面に移動します。
サーバ/アカウント:
plus-x9.xsrv.jp
(plus-x9)
サーバパネル:
https://gyazo.com/22c05b30c4b2c2696e7c5eba3b5437af
→Cron設定をクリックします。
Cron設定画面:
https://gyazo.com/dd1760aafea136edba59a03ec6a767ad
→Cron設定追加をクリックします。
https://gyazo.com/4d2c73611da166832a80f2c38a931070
→以下を入力します。
分:
30
コマンド:
/usr/bin/php7.4 /home/plus-x9/plus-creative.xyz/public_html/nakata/asp_reward/slack.php
それ以外:
*
https://gyazo.com/26b58bb3fc312e727f45d1a13878034f
→確認画面へ進む→追加する
で完了となります。
中田
ASPツールの設定を以下のページでテスト作業しています。
https://plustest:plussp@plus-creative.xyz/nakata/asp_reward/
以下設定したので、日々自動挿入されるか確認中
1.バリューコマースを抜く
■日次発生報告【ASP別】
8/4(金)
A8:1,219,057円(月間計:5,242,170円)
A8(plus02):1,357,500円(月間計:7,043,450円)
felmat:5,662,500円(月間計:25,307,530円)
afb:950,460円(月間計:4,093,310円)
ラココ:48,000円(月間計:432,000円)
アクトレ(plus0502):349,000円(月間計:1,549,597円)
バリューコマース:15円(月間計:5,015円)
リンクシェア:0円(月間計:0円)
Janet:406,800円(月間計:1,210,165円)
中田
出力テストページ にて、作業中
https://plus-creative.xyz/nakata/asp_reward/
中田
次の作業:
1.バリューコマース,ラココを抜く,
■日次発生報告【ASP別】
8/4(金)
A8:1,219,057円(月間計:5,242,170円)
A8(plus02):1,357,500円(月間計:7,043,450円)
felmat:5,662,500円(月間計:25,307,530円)
afb:950,460円(月間計:4,093,310円)
アクトレ(plus0502):349,000円(月間計:1,549,597円)
リンクシェア:0円(月間計:0円)
Janet:406,800円(月間計:1,210,165円)
1と2のあと、Slackに投稿設定
現時点の疑問:
・APIの連携方法
・どのチャンネルへの投稿か
・何時に投稿か
中田
ログ出力するページの画面の設定。
https://plus-creative.xyz/nakata/asp_data/
・出力ページ、サイトマップ見直し
・ページのリンク
・出力ログのテーブル
中田
APIでの
前日報酬額取得出来ているっぽい。
以下コードまとめ。
https://colab.research.google.com/drive/1szKqrDVLCNswJe0tazoWG0pYryRdJqyV#scrollTo=fr5BaH8hXPHs
cronで回し数日の値を比較して検証。
https://lifework.link/task_manage/uploads/2023626182729_valuecommerce_api
(2).py
中田
import requests
import base64
from datetime import datetime, timedelta
import calendar
from typing import Dict, List
from dateutil.relativedelta import relativedelta
from datetime import timedelta, datetime, timezone
import json
asp_name="valuecommerce"
LOGIN_PAGE="https://aff.valuecommerce.ne.jp/"
ID="ccccc@xxxx.jp"
PW="zzzzzz"
PW="cccccc"
insert_asp=asp_name
sites = [
{
"name": "XXXXXX",
"client_key": "xxxxx",
"client_secret": "cccccc",
"affiliate_id": "000000"
}
}
]
yesterday = (datetime.today() - timedelta(days=1)).strftime('%Y-%m-%d')
now = datetime.now()
first_day_of_month = datetime(now.year, now.month, 1)
last_day_of_month = datetime(now.year, now.month, calendar.monthrange(now.year, now.month)[1])
TOKEN_API = "https://api.valuecommerce.com/auth/v1/affiliate/token/"
def get_token(credentials):
headers = {
"Authorization": f"Bearer {credentials}",
"Accept": "application/json"
}
params = {
"grant_type": "client_credentials"
}
response = requests.get(TOKEN_API, headers=headers, params=params)
if response.status_code == 200:
token = response.json().get('resultSet', {}).get('rowData', {}).get('bearer_token')
print(f"Successfully retrieved token: {token}")
return token
else:
print(f"Failed to retrieve token. Status code: {response.status_code}")
return None
for site in sites:
credentials = base64.b64encode(f"{site['client_key']}|{site['client_secret']}".encode()).decode()
site["token"] = get_token(credentials)
for site in sites:
print(site)
responses = []
for site in sites:
headers = {
'Authorization': f'Bearer {site["token"]}'
}
payload = {
'affiliate_id': site['affiliate_id'],
'date_from': yesterday,
'date_to': yesterday
}
response = requests.get('https://api.valuecommerce.com/report/v2/affiliate/transaction/',
headers=headers, params=payload)
# レスポンスをリストに追加
responses.append(response.json())
#print(response)
insert_reward = sum(item['itemPriceTotal'] for response in responses for item in response['resultSet']['rowData'])
print(insert_reward) # 合計金額
JST = timezone(timedelta(hours=9), 'JST')
now = datetime.now(JST)
yesterday = now - timedelta(days=1)
logday = yesterday.strftime('%Y-%m-%d')
getday = now.strftime('%Y-%m-%d %H:%M:%S')
insert_date = logday
insert_insert_date = getday
insert_account = ID
headers = {'Content-Type': 'application/json','API-KEY': 'wZZhMHT9SZGr'}
url='https://plustest:plussp@plus-creative.xyz/nakata/asp_data/api/'
data = json.dumps({
"api":"insert",
"account": insert_account,
"log_date": insert_date,
"asp": insert_asp,
"reward": insert_reward,
"insert_date": insert_insert_date,
})
response = requests.post(url, headers=headers, data=data)
print(response.content)
中田
responses = []
for site in sites:
headers = {
'Authorization': f'Bearer {site["token"]}'
}
payload = {
'affiliate_id': site['affiliate_id'],
'date_from': yesterday,
'date_to': yesterday
}
response = requests.get('https://api.valuecommerce.com/report/v2/affiliate/transaction/',
headers=headers, params=payload)
# レスポンスをリストに追加
responses.append(response.json())
for response in responses:
print(response)
insert_reward = sum(item['itemPriceTotal'] for response in responses for item in response['resultSet']['rowData'])
print(insert_reward) # 合計金額
中田
https://colab.research.google.com/drive/1szKqrDVLCNswJe0tazoWG0pYryRdJqyV#scrollTo=fr5BaH8hXPHs
中田
import requests
import base64
from datetime import datetime, timedelta
import calendar
from typing import Dict, List
from dateutil.relativedelta import relativedelta
sites = [
{
"name": "XXXX",
"client_key": "XXXX",
"client_secret": "XXXXX",
"affiliate_id": "XXXX"
},
{
"name": "XXXX",
"client_key": "XXXX",
"client_secret": "XXXXX",
"affiliate_id": "XXXX"
},
]
TOKEN_API = "https://api.valuecommerce.com/auth/v1/affiliate/token/"
def get_token(credentials):
headers = {
"Authorization": f"Bearer {credentials}",
"Accept": "application/json"
}
params = {
"grant_type": "client_credentials"
}
response = requests.get(TOKEN_API, headers=headers, params=params)
if response.status_code == 200:
token = response.json().get('resultSet', {}).get('rowData', {}).get('bearer_token')
print(f"Successfully retrieved token: {token}")
return token
else:
print(f"Failed to retrieve token. Status code: {response.status_code}")
return None
for site in sites:
credentials = base64.b64encode(f"{site['client_key']}|{site['client_secret']}".encode()).decode()
site["token"] = get_token(credentials)
for site in sites:
print(site)
中田
まず、テストアカウントにてAPIの接続テストを行うため、トークンを発行から始める
本アカウントの場合:
サイトが16個あるためその分トークンの発行が必要だと思われる。
1日のデータ取得の際のコード見直し、
次回(11/1)のデータ取得の際、再確認。