クリプト

【Python】ALISユーザーの「いいねの数」と「獲得したALISトークン」を表示する方法

ゆうき's icon'
  • ゆうき
  • 2018/09/12 01:40
Content image


リンク:

アリスブログ「ALISのAPI」を使用する方法まとめ > 当記事


◆ 【Python】ALISユーザーの「いいねの数」と「獲得したALISトークン」を表示する方法

特定のALISユーザーの『記事の情報』を全部取得してみよう!」の続き。


特定のユーザーの記事の番号を全て獲得することができた場合、

追加でリクエストを送れば、「いいねの数」や「獲得したALISトークン」も閲覧可能になるので、試してみました。


○ 関連記事



◆ 「user_name1」の記事を「limit1 × loop_num」個取得した後、「いいね」と「ALISトークン」の合計を表示するプログラム

import urllib.request
import json
import pprint
import time
import math


#任意の値
user_name1 = 'yuuki';

limit1 = 3;
loop_num = 1;

#固定の値
article_id_memo1 = '';
sort_key_memo1 = '';

article_box2 = []


for count1 in range(loop_num):
    try:
        url_name1 = f'https://alis.to/api/users/{user_name1}/articles/public?limit={limit1}';

        if count1 >= 1:
            url_name1 += f'&article_id={article_id_memo1}&sort_key={sort_key_memo1}'

        cm_data1 = urllib.request.urlopen(url_name1)
        article_box1 = json.loads(cm_data1.read().decode("utf-8"))
        article_box2.extend(article_box1['Items'])

        load_article1_len1 = len(article_box1['Items']);

        print("Load : " + str(count1))

        if load_article1_len1 <= 0:
            break

        else:
            article_id_memo1 = article_box1['Items'][load_article1_len1 - 1]['article_id'];
            sort_key_memo1 = article_box1['Items'][load_article1_len1 - 1]['sort_key'];

        #time.sleep(1)

    except:
        print("Error!")
        break


print("")

page2 = 0;
like_sum = 0;
alis_token_sum = 0;



for article3 in article_box2:
    url_name2 = f'https://alis.to/api/articles/' + article3['article_id'] + '/likes';
    cm_data2 = urllib.request.urlopen(url_name2)
    like_dict1 = json.loads(cm_data2.read().decode("utf-8"))

    like1 = like_dict1['count']
    like_sum += like1;


    url_name3 = f'https://alis.to/api/articles/' + article3['article_id'] + '/alistoken';
    cm_data3 = urllib.request.urlopen(url_name3)
    alis_token_dict1 = json.loads(cm_data3.read().decode("utf-8"))

    alis_token1 = alis_token_dict1['alis_token'] / 1000000000000000000;
    alis_token_sum += alis_token1;


    print(article3['title'] + " いいね : " + str(like1) + " ALIS : " + str(math.floor(alis_token1 * 100) / 100))

    page2 += 1;
    if page2 >= 10 :
        page2 -= 10;
        print("")

    time.sleep(1)


load_article1_len2 = len(article_box2);
if load_article1_len2 < 1 : load_article1_len2 = 1;



print("")
print("いいねの合計 : " + str(like_sum))
print("いいねの平均 : " + str(math.floor(like_sum / load_article1_len2 * 100) / 100))
print("ALISトークンの合計 : " + str(math.floor(alis_token_sum * 100) / 100))
print("ALISトークンの平均 : " + str(math.floor(alis_token_sum / load_article1_len2 * 100) / 100))


print("要素数 : " + str(len(article_box2)))
print("")


input('Enterキーで終了')

※ 追加(修正)した文の中の「説明しておきたい所」を、太字にしています


ソースコードが結構長くなってきましたね

ですが、前半のループ部分は「前回の記事と同じ」なので、「『article_box2に記事の情報を全部代入するプログラム」と認識しておけば、さほど困らないと思います。


後半の部分だけ、しっかり覚えていきましょう!


○ 注意事項

・負荷がかかりやすい

上記のコードを実行すると「ユーザーの記事数 × 2 + α」分、ALISサーバーにリクエストが行われます

……もし仮に、ユーザーの制作した記事数が「300」だとすると、短期間で「600~700」回も呼び出しを行ってしまうことになります

そのため、本番の動作の際は、多少気をつけておいたほうが良いでしょう。

(とはいえ、何度も連続で呼び出さない限り、特に問題はないと思います


・このプログラムは実行が遅い

リクエスト回数がとても多いことと、負荷対策として「time.sleep(1)」を導入していることから、実行に時間がかかります

(※1 おおよそ、「記事数 × 2秒」の時間を必要とします)

(※2 「300記事」投稿しているユーザーの情報を呼び出す場合、10分ほど待たなければなりません


・後に「APIの呼び出しの制限」が設定されるかもしれない

現在のALISのAPIの呼び出しは「無制限」ですが、そのうち、1時間に○○○回まで、といった制限が設定される可能性もあります。

制限が設定されている状態で、このプログラムを(最速で)実行すると、エラーになってしまう可能性があるので、気をつけておきたいです。


なお、コマンドプロンプトを選択していなくても、プログラムは裏側で勝手に動作するので、ロードを行っている時に「他の作業」をすることもできます


○ 説明!

import math

今回は、「math.floor」という「小数点を切り捨てるプログラム」を使いたいので、「math」のモジュールを追加で宣言しておきます。


page2 = 0;
like_sum = 0;
alis_token_sum = 0;

必要となる変数の宣言です。

「いいねの数」の合計をカウントする時などで、使用しています。


for article3 in article_box2:

読み込んだ記事の数分だけループ。

この下のコードで、再びAPIのリクエストを行います


url_name2 = f'https://alis.to/api/articles/' + article3['article_id'] + '/likes';

今度は、「/articles/{article_id}/likes」という「特定の記事のいいね数を獲得するAPI」を使用したいので、URLが少し変わっています。


like1 = like_dict1['count']
like_sum += like1;

獲得したデータから、「int型」のデータを抽出して、「like1」に代入。

ついでに、いいね数を「合計いいね数」に加算。


url_name3 = f'https://alis.to/api/articles/' + article3['article_id'] + '/alistoken';

次は、ALISトークンの獲得量がわかるAPIの呼び出し。


alis_token1 = alis_token_dict1['alis_token'] / 1000000000000000000;
alis_token_sum += alis_token1;

ALISトークンの獲得量は、1000000000000000000倍(10 ^ 18)された状態で表示されているので、元の見やすい値(ALISのサイトで表示されている単位)に戻します。


print(article3['title'] + " いいね : " + str(like1) + " ALIS : " + str(math.floor(alis_token1 * 100) / 100))

「記事のタイトル名」「いいねの獲得量」「ALISトークンの獲得量」を1つの行にまとめて表示します。


・「math.floor(alis_token1 * 100) / 100)」について

「alis_token1」をそのまま表示すると「3.000000000000000000」であり、見づらいことから小数点を切り捨てることで見やすくします


ですが、整数だけだと、獲得量(変数)の精度が大分落ちてしまうため、

本来 : 3.000000000000000000

×100:300.000000000000000000

小数点の切り捨て:300

÷100:3.00

のようにして、小数点第2位まで閲覧できるようにしています。

つまり、

「math.floor(変数 * 100) / 100)」は、変数の小数点第2位以下を切り捨てるプログラム

ということですね。



page2 += 1;
if page2 >= 10 :
    page2 -= 10;
    print("")

10回カウントしたら、カウントをリセットして、改行を加えるプログラムです。

これで、記事一覧の表示を10個ずつに分けて、可読性を上げます。


time.sleep(1)

今回は無効化されていないタイマースリープ。

最も、この程度の負荷なら、さほど問題にはならないはずなので、無効のままでも良さそうです。

(無効にすると、プログラムの実行速度が上がります)


load_article1_len2 = len(article_box2);
if load_article1_len2 < 1 : load_article1_len2 = 1;

平均値を求める際に、記事の合計数が必要となるため、ここで作成。

ただし、0除算は許されないので、最低値は「1」にしておきました。


print("いいねの合計 : " + str(like_sum))
print("いいねの平均 : " + str(math.floor(like_sum / load_article1_len2 * 100) / 100))
print("ALISトークンの合計 : " + str(math.floor(alis_token_sum * 100) / 100))
print("ALISトークンの平均 : " + str(math.floor(alis_token_sum / load_article1_len2 * 100) / 100))

今まで獲得してきたデータを使って、合計値と平均値を出力します。



○ 実行結果

「limit1 = 100」「loop_num = 3」で実行。

Content image

なんと! 私の記事のALISトークンの獲得量がバレてしまいました(笑)!


ちなみに、「user_name1」を「任意のALISのユーザーID」に変更することで、他の方のALISトークンの獲得量も全部わかります(他者の獲得量の公表は、非推奨です)。



「『ALISのAPI』を使用する方法まとめ」に戻る




◆ 「ゆうき」のツイッター


公開日:2018/09/12
獲得ALIS:39.89
ゆうき's icon'
  • ゆうき
  • @yuuki

投稿者の人気記事
コメントする
コメントする
こちらもおすすめ!
Eye catch
クリプト

Polygon(Matic)で、よく使うサイト(DeFi,Dapps)をまとめてみた

Like token Tip token
236.30 ALIS
Eye catch
クリプト

Eth2.0のステークによるDeFiへの影響を考える。

Like token Tip token
44.10 ALIS
Eye catch
クリプト

約2年間ブロックチェ-ンゲームをして

Like token Tip token
61.20 ALIS
Eye catch
クリプト

バイナンスの信用取引(マージン取引)を徹底解説~アカウントの開設方法から証拠金計算例まで~

Like token Tip token
3.50 ALIS
Eye catch
クリプト

Uniswap(ユニスワップ)で$ALISのイールドファーミング(流動性提供)してみた

Like token Tip token
59.99 ALIS
Eye catch
クリプト

【DeFi】複利でトークンを運用してくれるサイト

Like token Tip token
54.01 ALIS
Eye catch
クリプト

CoinList(コインリスト)の登録方法

Like token Tip token
15.55 ALIS
Eye catch
クリプト

【第8回】あの仮想通貨はいま「テレグラム-TON/Gram」

Like token Tip token
69.90 ALIS
Eye catch
クリプト

【初心者向け】JPYCを購入して使ってみました!

Like token Tip token
30.03 ALIS
Eye catch
クリプト

【初心者向け】$MCHCの基本情報と獲得方法

Like token Tip token
32.32 ALIS
Eye catch
クリプト

Uniswap v3を完全に理解した

Like token Tip token
18.92 ALIS
Eye catch
クリプト

UNISWAPでALISをETHに交換してみた

Like token Tip token
40.40 ALIS