クリプト

【Python】ALISのAPIのデータを「CSVファイル」に保存する方法

ゆうき's icon'
  • ゆうき
  • 2018/09/14 08:41
Content image


リンク:

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


◆ 【Python】ALISのAPIのデータを「CSVファイル」に保存する方法

ついにやってきました! CSVファイルの保存の回!


CSVファイルを生成することができれば、表計算ソフト(エクセルとか)と連携を取ることができるようになるので、今まで集計していたデータの「保存や分析」が行えるようになりますとても重要です

なので、しっかり覚えていきましょう!


○ 留意事項

・ファイルの作成を行ったら、最後に必ず、アプリを終了させて下さい。そうしないと、ファイルの情報が更新されないかもしれません

・本番用のプログラムは、実行速度が遅いです


○ 関連記事




◆ CSVファイルについて

CSV(comma-separated values)とは、項目を「,」(カンマ、コンマ)で区切った、テキストファイルのことです。


CSVデータの例:

a1,a2,ほげほげ,a4,
a5,a6,a7


上記のデータ列を、表計算ソフトで読み込んだ場合:

Content image


上記の「CSVデータの例」をメモ帳とかに保存して、「拡張子をcsv(中身は実質txt)」にすれば出来上がります。簡単です


○ Pythonで「CSVファイル」を生成する方法

import codecs

str1 = 'a1,a2,ほげほげ,a4\na5,a6,a7'

file_name1 = 'csv1.csv'

file1 = codecs.open(file_name1,'w','utf-8')

file1.write(str1)

file1.close


input('Enterキーで終了')

テキストデータを保存するプログラムと、殆ど同じコードです。


・「\n」について

「\n」は改行の宣言です。これを入れておかないと、次の行に改行されないので、気をつけておいて下さい


「CSVファイル」を生成したい場合は、APIから出力されたデータを「A,B,C,D,E,F……」のように「,」で分けながら、文字列に保存しておけば良いというわけですね。


……それでは、次に、「本番での使用方法」を見ていきましょう!



◆ 記事の情報をCSVファイルに保存するプログラム

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


#任意の値
user_name1 = 'yuuki'
load_num = 3 # 記事の呼び出しを行う数


#固定の値
article_id_memo1 = ''
sort_key_memo1 = ''
article_box2 = []


# 呼び出しする数の生成
if load_num < 1 : load_num = 1

limit1 = load_num
loop_num = (int)(1 + (load_num - 1) / 100)

if limit1 > 100 : limit1 = 100


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
load_article1_len2 = len(article_box2)

csv_str1 = '作成日時,タイトル名,いいねの数,ALISトークン\n'
csv_str_box1 = []



for article3 in article_box2:
    title_name1 = article3['title']

    date_str1 = (str)(datetime.datetime.fromtimestamp((int)(article3['sort_key'] / 1000000)))

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

    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_token2 = math.floor(alis_token1 * 100) / 100

    csv_str_box1.append(f'{date_str1},{title_name1},{like1},{alis_token2}\n')

    page2 += 1
    print(f'Load ({page2} / {load_article1_len2}) : {title_name1} いいね : {like1} ALIS : {alis_token2}')

    time.sleep(1)


for str1 in reversed(csv_str_box1):
    csv_str1 += str1



file_name1 = user_name1 + '_ALIS_ArticleData.csv'
file1 = codecs.open(file_name1,'w','utf-8')
file1.write(csv_str1)
file1.close



print('')
print(f'CSVファイル「{file_name1}」を作成しました!')

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


input('Enterキーで終了')

※1 説明しておきたい部分を太字にしています

※2 このソースコードは、「ALISユーザーの『いいねの数』と『獲得したALISトークン』を表示する方法」と「ALISの記事をバックアップする方法」に書かれているコードを合成したものです


○ 説明!

csv_str1 = '作成日時,タイトル名,いいねの数,ALISトークン\n'

CSVファイルの「冒頭の内容」を上記のようにしておきます。


csv_str_box1 = []

リスト型の宣言。

必要な文字列を、全て「csv_str1」に連結してしまっても良いのですが、

今回は「古い順から記事を表示したいため」、一度「リスト型」に「文字列」を格納して、順番の変更ができる状態にしておきます


date_str1 = (str)(datetime.datetime.fromtimestamp((int)(article3['sort_key'] / 1000000)))

日付を文字列で保存しておくプログラムです。

記事の情報には、「['sort_key']」と呼ばれる「unix時間」を保存したものがあるので、そちらを利用した上で「fromtimestamp」を用いて、「unix時間」を日付のデータに変換しています


・「 / 1000000」について

「['sort_key']」は精度が良すぎるので秒単位以下のデータは捨てています


・余談:「['published_at']」について

ALISの記事の情報には、「['published_at']」という名前の秒単位まで保存された「unix時間」のデータがあります。

こちらのほうが、「unix時間」を扱いやすいので、「['sort_key']」ではなく、「['published_at']」を使いたくなるものなのですが…、

なんと! (現時点での)この要素は「2018/05/01」、以前の「ALISの記事の情報」には含まれていないのです


このことから、「['published_at']」で投稿時間を保存していると、記事を取得している最後の方で(大分待った後に)、プログラムがエラーになって強制終了を起こします

鬼畜仕様です。ご注意下さい。


_(:3 」∠ )_  < このバグの発見に苦労したよ……



csv_str_box1.append(f'{date_str1},{title_name1},{like1},{alis_token2}\n')

CSVに保存しておきたいデータ(「日付,タイトル名,いいね数,ALISトークン数」)を、「csv_str_box1」に入れていきます。


for str1 in reversed(csv_str_box1):
    csv_str1 += str1

「reversed」は、呼び出す配列を反転させるコードです。

これにを使って、CSVに保存しておきたいデータを「csv_str1」内に逆から入れていきます。


file_name1 = user_name1 + '_ALIS_ArticleData.csv'
file1 = codecs.open(file_name1,'w','utf-8')
file1.write(csv_str1)
file1.close

最初の方で説明した「Pythonで『CSVファイル』を生成する方法」をちょっとだけ改造したものです。

このプログラムで、任意の文字列を、CSVファイルに保存します


○ 実行結果

・プログラムの確認

「user_name1 = 'yuuki'」「load_num = 10000」で起動

Content image


・生成されたCSVファイルの確認

Content image

今回は、古い順から記事を並べています。


・私の記事の「いいね数」と「ALISトークン」の関係

Content image

「APIの利用方法」と「CSVの操作」を覚えれば

ののたさん」が行っているような「ALISの分析データ」を出力することもできるようになります。



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




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


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

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

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

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

ジョークコインとして出発したDogecoin(ドージコイン)の誕生から現在まで。注目される非証券性🐶

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

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

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

クリプトスペルズで入手したMCHCを引き出す方法

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

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

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

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

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

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

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

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

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

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

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

NFT解体新書・デジタルデータをNFTで販売するときのすべて【実証実験・共有レポート】

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

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

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

コインチェックに上場が決まったEnjin Coin(エンジンコイン)コインを解説

Like token Tip token
21.49 ALIS