クリプト

【Python】「ALIS Media」の「HTMLデータ」を取得してみよう!

ゆうき's icon'
  • ゆうき
  • 2018/09/06 06:31
Content image


リンク:

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


◆ 【Python】「ALIS Media」の「HTMLデータ」を取得してみよう!

Pythonのインストール」が完了したら、早速、「ALISのAPI」をいじって何か凄いことしちゃおう! と思いたくなるものですよね。


○ 「ALIS」の新着記事を「3件」表示するプログラムのソースコード

import urllib.request
import json
import pprint

cm_data1 = urllib.request.urlopen('https://alis.to/api/articles/recent?limit=3')
article_box1 = json.loads(cm_data1.read().decode("utf-8"))
pprint.pprint(article_box1['Items'])

input('Enterキーで終了')

この文を使用すれば、「ALISのAPI」を利用して、ALISのデータを表示することができます。楽勝です

……しかしながら、これ、行数こそ少ないものの、結構色々なことを行っていたりします


無論、「関数化」してしまい、中身をブラックボックスにしてしまっても、特に問題はなかったりするのですが……この記事では、「ALISのAPI」を表示するプログラムの中身を、もう少し詳しく説明していきたいので、

ここでは、プログラムの一部に書かれている、


・urllib.request.urlopen

・read

・decode("utf-8")


が何なのかを記述していきます。


○ 留意事項

・pythonの経験は殆どないので、内容の一部に誤りがあるかもしれません

※ 「2018/09/08」において、記事の一部に誤りがあったので、内容を修正しています。


○ 関連記事



◆ 「ALIS Media」のHTML文を表示する方法

「urllib.request.urlopen」「read」「decode("utf-8")」の3つを使用した例としてわかりやすいのが、他のサイトの「HTMLファイル」を取得するプログラムでしょうか

そのため、今回は、「ALIS Media」の「HTML」を表示することができるプログラムのソースコードを掲示してみます。


○ 基本型

import urllib.request


url_name1 = 'https://alismedia.jp/ja/'

cm_data1 = urllib.request.urlopen(url_name1)

byte_data1 = cm_data1.read()

html1 = byte_data1.decode("utf-8")

print(html1)


input('Enterキーで終了')


○ 省略型

import urllib.request

cm_data1 = urllib.request.urlopen('https://alismedia.jp/ja/')
print(cm_data1.read().decode("utf-8"))

input('Enterキーで終了')


「基本型」と「省略型」のどちらであっても、ソースコードを実行すると、(インターネットに繋がっていれば、)ALIS公式サイトのデータを取得することができます


○ 説明

import urllib.request

urllib.request」という名前のモジュール(便利なプログラム、ライブラリのようなもの)を使用できるようにします

(もし、この宣言を行わずに他の場所で「urllib.request」と書くと、エラーが発生します)


url_name1 = 'https://alismedia.jp/ja/'

「url_name1」という名前の「変数(自由な型)」を作成した後、「文字列(str型、Stringの省略名)」にして、「https://alismedia.jp/ja/」という文字の情報を保存しておきます。

(「変数 = ''」と書くと、その「変数」は、「文字を保存する型」に変化します)


cm_data1 = urllib.request.urlopen(url_name1)

難所(説明する側にとっても……苦笑


urllib.request.urlopen(「文字列」)は、冒頭で読み込んだ「urllib.request」の機能の1つである「urlopen」を使用するものであり、

文字列に書かれているURLのサイトに接続して、サーバーにある情報を獲得できるようにするもの……だったと思います。


それと、ここで「cm_data1」という名前の「変数」に返されるものは、「コンテキストマネージャとして機能するオブジェクト」であり、「cm_data1」には「オブジェクト(クラス)」が詰まっているはずです(多分)。


(※1 なお、この時点で「url_name1」に書かれているURLが存在しないものだと、エラーが発生します)

(※2 「cm_data1」の型を「type()」で確認すると、「'http.client.HTTPResponse'の型」であることがわかります)


・コンテキストマネージャとは

説明が面倒なので省略(というか、よく知らない)。「python コンテキストマネージャ」と「python クラス」で検索してみて下さい。


とりあえず、生成したコンテキストマネージャの(クラスの)内部にある関数が使えるようになると思っておけば、問題ないと思います。

(例:「cm_data1.read()」。「read()」が使用できるようになっている)


byte_data1 = cm_data1.read()

「urllib.request.urlopen」で生成したオブジェクトから「read()」を呼び出すと、指定のURLのサイトから「HTML文」を「bytes型」で取ってきます


そして、「変数 = 」と記述することで、獲得した「bytes型のデータ」を「bytes型になった『byte_data1』」に入れます。


(※1 read()は、リクエストしたサイトが何も指定してなかったら、HTML文をbytes型で獲得するだけであり、ALISのAPIのURLのように、JSON形式の文字列をbytes型で受け取るケースもあります)

(※2 本来、「read()」は「close()」とセットで使うものなのですが、このような短いプログラムの場合は、アプリが終了した後に「close()」が呼ばれるので、「close()」を省略することができます)


html1 = byte_data1.decode("utf-8")

既に、指定のURLのサイトから取ってきた「HTML文」を「byte_data1」に詰め込んであるので、後はそれを表示すれば良さそう……に思えるのですが、

「byte_data1」に保存されているのは「bytes型」であり、そのまま表示すると「日本語」が表示されません


なので、ここで「uft-8」と呼ばれる「都合の良い文字コード」に変換して(「str型」にして)、日本語の表示ができるようにしておきます


print(html1)

獲得したHTMLの情報を、コマンドプロンプト上に表示(可視化)です!


成功すると、こんな感じになります。

Content image

ALISの運営サイトに書かれていることが、HTML形式で表示されていますね。



input('Enterキーで終了')

いつもの「おまじない」。

……実は、inputは、Enterキーで終了するものではなく、何らかの文字の入力待ち状態するだけであり、Enterキーを押せば先に進むようになります。

まぁ、結果として、Enterキーで次に進んで終了になるわけですけど……。



どうです?

この記事で、「urllib.request.urlopen」「read」「decode("utf-8")」の用法がわかりましたかね?

……これらの文は、冒頭の「ALISのAPIを利用するソースコード」にも書かれているので、HTMLを表示するソースコードと比較しながら、どのような仕組みであるのかを理解してみるのが良いと思います。



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




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


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

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

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

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

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

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

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

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

スーパーコンピュータ「京」でマイニングしたら

Like token Tip token
1.06k ALIS
Eye catch
クリプト

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

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

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

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

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

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

17万円のPCでTwitterやってるのはもったいないのでETHマイニングを始めた話

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

Bitcoin史 〜0.00076ドルから6万ドルへの歩み〜

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

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

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

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

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

ブロックチェーンの51%攻撃ってなに

Like token Tip token
0.00 ALIS