中田のタスク管理

タスクの詳細

完了
ASPの前日の発生額の出力 - 【最新】
依頼者 Eijiさん
進捗率
100%  作業状況
現在の作業 JANet リニューアル対応
作業完了日 2024-02-05 08:19:12
タスクタイプ 通常
タグ ツール,ASP
現状サマリー

現在「完了」、進捗 60%。工程は全18件中 18件完了。

最新報告「JANet 2重登録対応」(2023-10-05 08:25:33)

タスクの詳細情報・説明 別ウィンドウで表示

依頼の詳細

Valuecommerce のみ取得が不安定のためAPIを使用を試す
サイト数:16サイト

場所(設定場所・参考URL)

注文別レポート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/

対応者メモ・コメント 別ウィンドウで表示


作業工程・チェックリスト

現在の進捗:18/18 100%
トークン取得APIのテスト
注文別レポートAPI - 接続テスト
注文別レポートAPI - 取得テスト
トークン取得API - 本アカウント取得テスト
トークン取得API - 本アカウント取得設定
注文別レポートAPI - 本アカウント取得テスト
注文別レポートAPI - 本アカウント取得設定
取得額整形 DBinsert設定
動作チェック
テスト/修正
管理ページ
Slack送信テスト
Cron設定テスト
Slack Webhook設定
経過/確認
JANet 2重登録対応
アクトレ取得不具合対応
JANet リニューアル対応

コメント コメントフォーム

中田
JANet 2重登録対応

1日のデータ取得の際のコード見直し、
次回(11/1)のデータ取得の際、再確認。

コメントのURLコピー 2023-10-05 08:25:33
中田
アクセストレード、月またぎの修正

日付が1日の場合に追加の操作を行う

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()
コメントのURLコピー 2023-09-05 15:39:32
中田
JANetリニューアルページスクリプト作成メモ

slnm_janet2.pyでテスト中

パス:/var/www/html/asp_data_get/slnm_janet2.py

ログイン

https://j-a-net.jp/login?error_type=wrong_id_pass

id

passward

body > div.flex-wrapper > div.flex-wrapper__login-form > main > div > div.login-form__content > div.login-form__button > div > button

レポート

nav_cont > ul > li.wrap_li.page_report > a

nav_cont > ul > li.wrap_li.page_report > ul > li:nth-child(5) > a

レポートを表示

start_date

全部消す
日付入力
2023-09-03

end_date

全部消す
日付入力
2023-09-0

wrapper > div > section.report > div > form > div > input

クリック

レポート結果

highcharts > tbody > tr > td:nth-child(11)

コメントのURLコピー 2023-09-04 18:10:42
中田
Webhook URL

Webhook URL:
https://hooks.slack.com/services/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

コメントのURLコピー 2023-08-31 18:35:02
中田
Slack Webhook設定

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);

コメントのURLコピー 2023-08-29 18:32:40
中田
Slackへメッセージ送信ファイル見本

Slackへメッセージ送信ファイル見本
https://plus-creative.xyz/nakata/asp_reward/slack.php

コメントのURLコピー 2023-08-29 18:27:43
中田
Cron設定メモ

設定内容は...
X-serverにplus-x9サーバのアカウントにログイン→Cronの設定という流れ

Cronで指定時間に繰り返し実行するプログラムとなります。
asp_rewarda/slack.php
というファイルのプログラムを動作させます。


X-server Cron設定

→ログイン後、サーバパネルから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

→確認画面へ進む→追加する
で完了となります。

コメントのURLコピー 2023-08-29 18:27:10
中田

ASPツールの設定を以下のページでテスト作業しています。
https://plustest:plussp@plus-creative.xyz/nakata/asp_reward/

以下設定したので、日々自動挿入されるか確認中
1.バリューコマースを抜く

2.以下の見本の一番下部のような合計をを追加

■日次発生報告【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円)

合計:9,993,332円(月間計:44,883,237円)

コメントのURLコピー 2023-08-29 08:29:33
中田

出力テストページ にて、作業中
https://plus-creative.xyz/nakata/asp_reward/

コメントのURLコピー 2023-08-21 12:26:58
中田

次の作業:
1.バリューコマース,ラココを抜く,

2.以下の見本の一番下部のような合計をを追加

■日次発生報告【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円)

合計:9,993,332円(月間計:44,883,237円)

1と2のあと、Slackに投稿設定
現時点の疑問:
・APIの連携方法
・どのチャンネルへの投稿か
・何時に投稿か

コメントのURLコピー 2023-08-17 10:37:10
中田
管理ページ設定

ログ出力するページの画面の設定。
https://plus-creative.xyz/nakata/asp_data/

・出力ページ、サイトマップ見直し
・ページのリンク
・出力ログのテーブル

コメントのURLコピー 2023-07-24 08:27:20
中田

APIでの
前日報酬額取得出来ているっぽい。
以下コードまとめ。
https://colab.research.google.com/drive/1szKqrDVLCNswJe0tazoWG0pYryRdJqyV#scrollTo=fr5BaH8hXPHs

cronで回し数日の値を比較して検証。

https://lifework.link/task_manage/uploads/2023626182729_valuecommerce_api
(2).py

コメントのURLコピー 2023-06-26 18:27:39
中田

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

valuecommerce

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])

API endpoint

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)

sitesを表示

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())

レスポンスを確認

for response in responses:

#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

cURLで送信

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)

コメントのURLコピー 2023-05-30 20:08:38
中田
注文別レポート取得API

レスポンスを保存するリストを初期化

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) # 合計金額

コメントのURLコピー 2023-05-29 23:07:54
中田
中田
トークン取得API

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"
},
]

API endpoint

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)

sitesを表示

for site in sites:
print(site)

コメントのURLコピー 2023-05-23 19:01:13
中田

まず、テストアカウントにてAPIの接続テストを行うため、トークンを発行から始める

本アカウントの場合:
サイトが16個あるためその分トークンの発行が必要だと思われる。

コメントのURLコピー 2023-05-23 08:33:38

コメントフォーム

名前
タイトル
コメント
    ファイルのアップロード
    (このエリアにドロップしてください)
    ※ ファイルのURLはコメント内に含めてください。
    Markdown記法が使用可能
    # 見出し h1
    ## 見出し h2
    ### 見出し h3
    #### 見出し h4
    ##### 見出し h5
    
    **太字**
    
    水平線
    ---
    
    > 引用テキスト
    > 引用テキスト 
    
    ```
    コードの表示(ブロック)
    コードの表示(ブロック)
    コードの表示(ブロック)
    ```
    
    * リスト
    * リスト
    * リスト
    
    0. 番号リスト
    0. 番号リスト