前回まではPythonを使ってWebサイトの情報をスクレイピングしました。
その際にPython用に提供されているさまざまなライブラリを利用すれば比較的簡単に情報が抜き取れることを確認しました。
一方で、最近では多くのWebサイトの方で情報にアクセスする為のAPIを提供しており、それを利用すればもっと簡単、確実に必要な情報を取り出すことが可能となっています。
そこで今回は、そんなWebサイトの例としてVirusTotalが公開しているAPIにPythonからアクセスし、情報を取得してみたいと思います。
1.VirusTotalにアクセスする為のAPI Key取得
PythonからVirusTotalのAPIにアクセスする為には、まず、API Keyという自分の身元を証明するKeyを取得する必要があります。
そのAPI Key をPythonのプログラムを経由してVirusTotalに渡すことで、初めてWebサイトのAPIを利用することが可能になります。
API Key はVirusTotalのアカウント情報に紐づいていますので、もしまだアカウントを持っていなければ、それを作るところから始めます。
VirusTotalへのサインアップ
以下のVirusTotalのトップページ右上にある「Sign up」からアカウントの登録をしましょう。
アカウント情報を登録すると自分のメールアドレスにSign upを完了する為のメールが送られてきます。
そのメールのリンクをクリックすることでアカウントの登録が完了します。
VirusTotalへのログインとAPI Keyの取得
登録が完了したらさっそくVirusTotalにログインします。
ログインするとページの右上に自分のユーザアイコンが表示されています。
そのユーザアイコンをマウスでクリックすると、プルダウンリストに「API key」が表示されています。
それをクリックするとAPI Keyや利用制限などの情報が記載されたページが表示され、自分の API Key が確認できます。
2.PCに「vt-py」ライブラリをインストール
VirusTotal からそのサイトのAPIに簡単にアクセスする為のPython用のライブラリ「vt-py」が提供されています。
それをPyCharmなどの開発環境にインストールします。
あたらしいライブラリをPyCharmに導入する詳しい操作方法については、私の以前のブログにも記載していますので参考にしてみてください。
3.Pythonでプログラム開発
そしていつもどおり、おもむろにプログラムを開発します。
import vt apikey = "<API Key>" url = "<URL>" # access to VirusTotal and get URL information(object) client = vt.Client(apikey) url_id = vt.url_id(url) url = client.get_object("/urls/{}", url_id) client.close() # print each attribute from object print(url.get("categories")) print(url.get("last_analysis_date")) print(url.get("times_submitted")) print(url.get("last_analysis_stats"))
2行目の<API Key>の部分は自分のAPI Key を “8・・・・・a”のような感じで埋め込んでください。
また3行目の<URL>については、例えば yahooについて調べる場合は、”https://yahoo.co.jp”のような感じで埋め込んでください。
なお今回は、Pythonのプログラムに直接API Keyを埋め込む形になっていますが、正しくはAPI Key情報は別のファイルに保存し、しっかり暗号化などしておいてほうがよさそうです。
うっかり漏らしてしまうと、自分になりすましてアクセスされてしまいますよー。
4.Pythonの実行
実際にあるサイトについて実行した結果は以下の通り harmless : 87, malicious : 0 となっていました。問題ないという判断のようですね。
{'Forcepoint ThreatSeeker': 'search engines and portals', 'Sophos': 'portal sites', 'alphaMountain.ai': 'Search Engines/Portals', 'Comodo Valkyrie Verdict': 'mobile communications', 'BitDefender': 'news'} 1654330912 489 {'harmless': 87, 'malicious': 0, 'suspicious': 0, 'undetected': 8, 'timeout': 0}
ちなみに自分のサイト(k2-ornata.com)を調べようとしたところ、以下のとおり知らんと言われましたー。
vt.error.APIError: ('NotFoundError', ・・・
それなりに良い意味でも悪い意味でも有名なサイトでないといけないようです。^^;
まあ、すでにDBに格納されているデータから情報を取り出しているのであ当たり前ですね。。。
5.他にどんな情報が取れるのかは要確認・・・
今回は指定したURLに関して以下の4つの情報が取れることがわかりました。
categories
last_analysis_date
times_submitted
last_analysis_stats
しかし、その他どんな情報がとれるのかについては調べきることができませんでしたので、今後の課題にしておきたいと思います。
<参考サイト>
・VirusTotalの公式APIライブラリ「vt-py」を使ってみた。(たれながし.info)
https://tarenagashi.hatenablog.jp/entry/2021/06/09/223105
・vt-py Quickstart(VirusTotal)
https://virustotal.github.io/vt-py/quickstart.html#get-information-about-an-url
コメントを残す