暇人の研究室

金融工学やR言語・統計学について書いてます。

<

【Web技術】APIについての分かりやすい解説

 

APIとは?

 

 APIとは、アプリケーションプログラミングインタフェース( Application Programming Interface)とは、ソフトウェアコンポーネントが互いにやりとりするのに使用するインタフェースの仕様である。

 

ひとことでいうと、APIとは「ソフトウェアの機能を共有すること」です。

 

つまり、APIとは自分のソフトウェアを一部公開して、他のソフトウェアと機能を共有できるようにしたものです。

 

このようにソフトウェアの一部をWEB上に公開することによって、誰でも外部から利用することができるようになります。

 

それによって、自分のソフトウェアに他のソフトウェアの機能を埋め込むことができるようになるので、アプリケーション同士で連携することが可能になるのです。

 

皆さんの身近なものだと、Twitterの連携して自分のツイートから性格などを診断するサービスはWebAPIを使った代表的な例です。

 

 

APIの特徴

 

上述したように、APIは自社のソフトウェアの一部の機能を他のソフトウェアでも使えるようにするものですが内部のコードまでは公開していません。

 

またセキュリティの観点から、使用方法についてもなどのルールも定められています。

 

APIは、このような仕様やルールと一緒にまとめてWEB上に公開しているのが一般的です。

 

なお、APIはWEB上で通信して利用することが普通なので「WEB API」と呼ばれることも多く、API=WEB APIというのが一般的になっています。

 

 

 

インターフェースとは何か?

 

APIは日本語名称は「アプリケーションプログラミングインターフェース」です。

 

IT用語としての『インターフェース』とは、人間とコンピューターの間で、情報のやりとりをしてくれる役割を果たすものです。

 

具体的にいうと、パソコンのキーボードやマウス、テレビのリモコンや駅の券売機などがインターフェースにあたります。

 

これらはすべて、人間の操作に従ってコンピューターに情報を伝えて会話をしてくれる翻訳機のような役割をしています。

 

同じように、APIも「プログラマー」の代わりに「アプリケーションに情報や指示を出してプログラミングしてくれる」ような役割をしているので、「アプリケーションプログラミングインターフェース」と呼ばれているのです。

 

 

 

APIの目的

 

APIを作る側としては自社サービスの機能をAPIとして公開することで、同じ特徴をもったサービスが開発しやすくなります。

 

それによって、ある機能に特化させたり、さらに使いやすく一部の機能だけ改良することができ、その結果さらに多くのサービスが生まれ自社サービスの発展に繋がります。

 

またAPIでは他社のデータを使うこともできるので、同じ情報を様々な分野で活用してもらうことで、情報を分析することが容易になり、各分野に特化した分析をおこなうことができます。

 

そこから顧客の傾向や特徴を発見することで、イノベーションが生まれ、新しいビジネスが生まれるのです。

 

反対にAPIを使わ側は作りたい機能がすでにAPIで公開されているなら、同じプログラムを1から作る必要がないので開発時間を大幅に短縮できます。

 

さらに無料で利用できるため、開発コストも大幅に削減でき、かつ効率的にアプリケーションを制作することができます。

 

 

APIは昔からある概念でしたが、近年改めて企業のビジネスを広く外部に提供するための接点や手段としてあらためて注目されています。  

 

 

【R言語】rvestパッケージによるウェブスクレイピング その2

 

 

www.tkstock.site

 

 

 

前回に引き続いて今回は実際のWebサイトをスクレイピングしていきます。

 

というわけで新世紀エヴァンゲリオンのWikipediaのデータ(新世紀エヴァンゲリオン - Wikipedia)をスクレイピングしてタグや文字の検索・抽出を行っていきます。

 

 

 

###サイトのデータを取り込む###

> eva<-read_html("https://ja.wikipedia.org/wiki/新世紀エヴァンゲリオン") 

 

###取り込んだデータの確認###

> eva
{xml_document}
<html class="client-nojs" lang="ja" dir="ltr">
[1] <head>\n<meta http-equiv="Content-Type" content="text/html; charset=UT ...
[2] <body class="mediawiki ltr sitedir-ltr mw-hide-empty-elt ns-0 ns-subje ...
>

 

取り込んだサイトデータの全容を把握したいのならば、サイトのページで右クリック⇨ページのソースでそのサイトのHTML構成を見ることが可能です。

 

ちなみにこのページならこんな感じです。

 

f:id:oruka199665:20170710044256j:plain

 

 

###見出しの抽出###

> eva %>% html_nodes("h1")
{xml_nodeset (1)}
[1] <h1 id="firstHeading" class="firstHeading" lang="ja">新世紀エヴァンゲリオン</h1>

 

###見出しの文字だけを抽出###

> eva %>% html_nodes("h1")%>%html_text
[1] "新世紀エヴァンゲリオン"

 

###リンクの抽出###

> eva %>% html_nodes("a") %>% html_attr("href")
[1] NA
[2] "#mw-head"
[3] "#p-search"
[4] "/wiki/%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB:Question_book-4.svg"
[5] "/wiki/Wikipedia:%E6%A4%9C%E8%A8%BC%E5%8F%AF%E8%83%BD%E6%80%A7"
[6] "/wiki/Wikipedia:%E4%BF%A1%E9%A0%BC%E3%81%A7%E3%81%8D%E3%82%8B%E6%83%85%E5%A0%B1%E6%BA%90"

 

 

前回は触れませんでしたが、抽出したノードはDOMという形式で階層上に枝分かれした状態で保存されています。

 

なので階層を指定して、その部分にあるタグのみを抽出することも可能です。

 

###head部分のみを抽出する###

> eva %>% html_nodes(xpath="/html/head")
{xml_nodeset (1)}
[1] <head>\n<meta http-equiv="Content-Type" content="text/html; charset=UTF- ...

 

###テーブル(表)の抽出

eva %>% html_nodes(xpath="//table")
{xml_nodeset (44)}
[1] <table class="plainlinks ambox ambox-content" role="presentation"><tr>\ ...
[2] <table class="infobox bordered">\n<tr>\n<th colspan="2" style="backgrou ...
[3] <table class="collapsible collapsed" style="background:transparent; wid ...
[4] <table class="vertical-navbox nowraplinks" style="float:right;clear:rig ...
[5] <table class="wikitable" width="250px" align="right" cellpadding="0" ce ...
[6] <table class="wikitable" border="1">\n<tr>\n<th>機体</th>\n<th>補足</th>\n< ...

 

###<p>タグの要素を抽出###

eva %>% html_nodes(xpath="//p")
{xml_nodeset (94)}
[1] <p>『<b>新世紀エヴァンゲリオン</b>』(しんせいきエヴァンゲリオン、<i>Neon Genesis EVANGELION</i>)は、 ...
[2] <p><a href="/wiki/%E5%BA%B5%E9%87%8E%E7%A7%80%E6%98%8E" title="庵野秀明">庵野 ...
[3] <p><a href="/wiki/1995%E5%B9%B4" title="1995年">1995年</a>10月4日から<a href= ...
[4] <p>漫画とアニメの<a href="/wiki/%E3%83%A1%E3%83%87%E3%82%A3%E3%82%A2%E3%83%9F% ...
[5] <p><a href="/wiki/2006%E5%B9%B4" title="2006年">2006年</a>には、本作を新たな設定・ストー ...
[6] <p>本作品の著作権者表記はテレビ版に関しては「GAINAX/Project Eva.・テレビ東京」、劇場版に関しては「GAINAX/EVA制 ...
[7] <p>物語の舞台は<a href="/wiki/%E8%A5%BF%E6%9A%A6" title="西暦">西暦</a><a href="/ ...
[8] <p>当初はゲンドウの命令で、そして<b>EVA零号機</b>のパイロットである少女<b><a href="/wiki/%E7%B6%BE%E ...
[9] <p>しかし、<a href="/wiki/%E3%82%A2%E3%83%A1%E3%83%AA%E3%82%AB%E5%90%88%E8% ...
[10] <p>自らが乗ったEVAの手で友人が足を切断する大怪我を負ったことで、シンジはEVAのパイロットを辞めるが、そこに強大な力をもつ第14使徒が現 ...
[11] <p>しかし第15使徒との戦いにおいてアスカが精神攻撃を受け廃人となり…

 

 

"//table"のように要素名の前に//をつけると、階層が異なるすべての要素を抽出できます。

 

 

【Web技術】Rでのスクレイピングにおける文字コードの確認と変換

 

 

文字コードとは?

 

 コンピュータ内部では文字であろうと画像であろうと、あらゆるものを数値で処理しています。

 

文字コードとはPC上で文字を表示させる仕組みで、ひらがな・カタカナ・漢字にそれぞれ特定の数値を当てはめて区別する仕組みです。

 

ちなみに日本語の場合は、macやlinuxで使われている「UTF-8」とWindowsで使われている「Shift_JIS」の2つが主流です。

 

ちなみに世界では「UTF-8」が主流となりつつあり、もしWindows版のプログラムでUTF-8で作成されたHTMLを読み込む際、文字データが正確に表示されないいわゆる文字化けが起こることがあります。

 

 

Rを使って文字コードを変換する

 

  まずひらがなの「あ」の文字コードを見てみます。

 

文字コードは16進法という「0123456789 a b c d e f」の16個の英数字で構成された特殊な記述法で表現されます。

 

 

> charToRaw("あ")
[1] 82 a0
> charToRaw("た")
[1] 82 bd

> charToRaw("w")
[1] 77

 

 

Windowsに使われているShift_JISだと1つの日本語を2つの数値で返し、アルファベットは1つの数値で返します。

 

ちなみにRでは文字コードを変換することができます。というわけでShift_JISをmacやlinuxで使われているUTF-8に変換してみます。

 

WindowsではUTF-8は文字化けするんじゃないかったの?と思いますがWindows版Rでは、UTF-8の文字コードでも文字化けしません。

 

 

> a<-"あ"

> a<-iconv(a, to = "UTF-8")
> charToRaw(a)
[1] e3 81 82

 

 UTF-8では日本語の文字を3つの数値を使って表現します。

 

 

対象サイトの文字コードを確認

 

スクレイピングする際に、対象のサイトの文字コードを確認しないとデータをスクレイピングしても上手く関数が動かないことがあるので、まず確認する必要があります。

 

>library(rvest)

>library(dplyr)

>x<-read_html("http://www.tkstock.site/")

> x%>%html_node(xpath="//meta[@content |@charset]")
{xml_node}
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">

 

今回はUTF-8でしたが、もし対象とするサイトの文字コードがUTF-8でなかったときはread_html()に、encording=”UTF-8”という引数を指定して文字コードをUTF-8に変換しておくのが無難です。

 

 

 x<-read_html("http://www.tkstock.site/",encording="UTF-8")

 

ですがテキストマイニングなどを行う場合は、CP932の方がオススメです。

 

x<-read_html("http://www.tkstock.site/",encording="CP932")

 

 

【Web技術】XMLとは何なのか?

 

 

 

XMLとは?

 

XMLはデータを構造的に記録して送信するために開発されたフォーマットで、HTMLが見栄えに重きを置いているのに対して、XMLはデータ管理に重きを置いたマークアップ言語です。

 

例えば売り上げデータなどを管理したいなどという場合にXMLを使用すると、情報を一元的に管理できますし、その情報をインターネットやプログラムから利用できるようになります。

 

 

XMLの特徴

 

XMLはテキストファイルですので、何かソフトがなければデータが見えないとか、OSが違うとデータが見えないということがありません。インターネットに公開しておけば、どこからでも参照することが可能です。

 

 

映画「ターミネータ」のレビュー

ターミネータ2

評価 95点
感想 とても良い、歴史残る名作

ターミネータ4

評価 10点
感想 長い、つまらん

 

 

これをHTMLでだとこう記述されています。

 

 <html>

 <h1>ターミネータ2</h1>
<table border="1">
<tbody>
<tr>
<td>評価</td>
<td>95点</td>
</tr>
<tr>
<td>感想</td>
<td>とても良い、歴史残る名作</td>
</tr>
</tbody>
</table>
<h1>ターミネータ4</h1>
<table border="1">
<tbody>
<tr>
<td>評価</td>
<td>10点</td>
</tr>
<tr>
<td>感想</td>
<td>長い、つまらん</td>
</tr>
</tbody>
</table>

</html>

 

一方同じデータをXMLで記述するとこうなります。

 

<?xml version="1.0",excording="UTF-8"?>
<all_movies>

<movie>
<title>ターミネータ2</title>
<point>95点</point>
<review>とても良い、歴史残る名作</review>
</movie>

<movie>
<title>ターミネータ4</title>
<point>10点</point>
<review>長い、つまらん</review>
</movie>

</all_movies>

 

 

最初の <?xml version="1.0",excording="UTF-8"?> はこのドキュメントが、XML形式であることをPCに宣言しています。

 

ここでXMLの特徴としては、タグが自由に設定できて、データに意味を持たせ、構造化できる点です。

 

これはPCから観れば、文書の構造がhtmlよりXMLの方が情報がシンプルなのでわかりやすいものとなります。

 

例えば、映画のタイトルだけ抽出したい場合、タグ<all_movies>の<movie>の<title>を抽出するようにプログラムに命令すれば、"ターミネータ2"・"ターミネータ4"を抽出できるようになります。

 

そしてXMLはデザインを分離していることにより、1つのXMLデータをもとに、XSLを変えるだけでさまざまな表現を行うことができます。

 

また、データが意味と構造をもっていることは、システム間でのデータ交換にとって大きなメリットとなります。

 

仕事でよく使われるExcelのCSV形式のデータだと、データの内容ではなく並び順によって処理するので、もとになるデータ項目に追加・変更・削除など行われると、そのたびに連携する双方でシステムを変更しなければならないので面倒です。

 

ですが、XMLなら必要となるタグを目安にデータを取捨選択し、必要なデータだけを処理することができます

 

 そういった点でデータ管理という面ではXMLの方がcsvやhtmlより優れているのです。

 

上述したようにXMLは人間が目視するためではなく、データを構造的に効率よく記録して送受信するために開発された言語です。

 

なので、XMLは現在でも幅広く使用されているフォーマットであり、スマホアプリでのユーザーとサーバ間の通信されるデータなどにも使われています。

 

ちなみに、ユーザーとアプリのクライアント間で、データを送受信する技術をAPIと言い、XMLはAPIにおいて標準フォーマットの1つになっています。

 

 

まとめ

 

XMLのタグは、データの意味を表し、構造化できる。

htmlとは違い、タグを自由に決めることができる。

XMLにはレイアウト・デザインの機能を分離している。

 

 

 

 

【Web技術】『https://』『www.』とは何なのか?その違いは?

 

みなさん、ウェブブラウザでネットサーフィンをしているときブラウザのアドレス欄によくhttps://www.~」というのを目にすると思います。

 

今回はこの「http」「www」とは何なのか?について取り上げていきたいと思います。

 

 

httpとは?

 

httpとは、Hypertext Transfer Protocol(ハイパーテキスト・トランスファー・プロトコル)の略です。

 

要するにWebサーバと、Webブラウザなどのクライアントがデータを送受信する際に使われる通信上の約束ごとで、コンピュータが話し合うための「言葉」を指定するものです。

 

日本人と「外国人」で話するときに「英語」を指定して話をするということです。プロトコル(通信規約)とは、言葉のルールを決めたものです。

 

あなたがWEBサイトを見たいのならば、httpという言葉を使ってホームページにアクセスすれば、サイトに書かれているhtmlを読むことができるということです。

 

そして、このやり取りをすべて勝手にやってくれるのがインターネットエクスプローラーやGooglechromeといったWebブラウザです。 

 

【Web技術】スクレイピングする上で抑えておきたいHTMLの基本的な仕組み

 

ブラウザなどのアドレス欄に http://www.yahoo.co.jp を記述するのは、ブラウザが www.yahoo.co.jp に「http」で通信を行うことを指定するためです。

 

この通信プロトコルには、他にも「https」 などもあり、これが無いとなんのプロトコルでそのホストと通信してよいかがわからないので必要です。

 

 

httpとhttps

 

httpとは、1990年にCERN(欧州原子核研究機構)に在籍していたティム・バーナーズ・リー氏によって開発されました。

 

基本的には普通のテキストデータを使い、 ブラウザなどのクライアントがWebサーバに対してget、putといったコマンドを送ると、 それに応じた結果がサーバから送られてきます。

 

そして送られてきたHTMLやJPEGといったテキスト・画像データをきれいに成形して見せるのは、 Googlechromeやインターネットエクスプローラーに代表されるWebブラウザの仕事になっています。

 

特徴としては、原則としてステートレス(= stateless 前回の状態は非保持の意)、 つまり1回コマンドを送ったら1回結果が返ってきてそれで終わり、ということが挙げられます。

 

ちなみにAmazonなどのネットショッピングでは取引確認などに複数回のやりとりが必要なので、これにcookieなどの技術を組み合わせて使うことで複数回のやりとりを追跡しています。

 

そして単にhttpを使ってデータのやり取りをしていると、データが暗号化されていないため、 通信経路のどこかで第3者に内容を知られる可能性があります。

 

これを防ぐために使われているのがhttpを暗号化した「https」というプロトコル(通信基準)です。

 

f:id:oruka199665:20170708162508j:plain

 

 

 

wwwとは

 

「 www」とは「World Wide Web(ワールド・ワイド・ウェブ)」の略称で、世界中に張り巡らされたクモの巣という意味です。

 


wwwはもともと、さまざまな種類のコンピュータ上で共有できるファイルシステムとして開発されたもので、インターネットそのものではなく、世界中のサーバで公開されている情報をインターネットのWebページとして得ることができるシステムのことをいいます。

 


wwwでは、URLを指定したり、Webページのリンクをクリックすることで、ユーザは世界中のwwwサーバに保存、公開されているWebページの情報を受信することができます。

 

そして、私たちはその受信したデータをWebブラウザを介して見やすい受け取る状態で観覧することができます。

 

このWebブラウザでは、ユーザのURL入力やクリックなどの操作に従って、wwwサーバとブラウザ間で必要な情報の交換や転送が行われ、ユーザの元に返ってきたHTML文書の内容をブラウザが解析し、パソコンの画面上に表示するのです。

 

 (例)

ブラウザが実際に受け取っているデータ⇨

<span style="color: #ff5252; font-size: 150%;"><strong> テスト</strong></span>

 

私たちが観覧するときに表示されるデータ⇨

 テスト

 

 

wwwの情報はHTMLという言語で記述され、文章だけでなく、多くの画像や音声なども含めて保存、公開されています。

 

 

 

httpとwwwの違い

 

上述したようにwwwサーバは、インターネット上で Webページのコンテンツを提供するサーバです。


その際に、http というプロトコル(通信ルール)に則ってHTMLデータをやりとりするのですが、その仕組みを提供するサーバという意味でhttpサーバとも呼ばれます。


要するに両者は同じものなのです。

 

提供する機能に重点をおけば WWWサーバ、提供する仕組みに重点を置けば httpサーバという名称になると理解できそうです。

 

よくリンクで同じサイトなのに「https://~」と「www.~」から始まる場合の2パターンの表記方法があるのはこのためです。

 

Webドキュメントから情報抽出するための技術まとめ

 

前回は、HTMLなどのWeb上におけるデータの表示構造の種類についてまとめました。

 

 

WEB上でデータを配信技術のまとめ(http・HTML・XML・AJAX・JSON)

 

 

今回はそのWebデータから文字やリンク・表といった情報を抽出する技術について見ていきます。

 

 

xpath

 

『XPath』とは、HTMLやXMLなどのマークアップドキュメントから特定の情報を抽出するための技術です。

 

Webスクレイピングしたデータを分析するにあたってはWebドキュメントを収集することも重要ですが、その収集したデータを構造化し見やすい形に成型するというプロセスが必須です。

 

そのための技術として『XPath』はとても重要と言えます。

 

 

 

JSONパーサ

 

 HTMLやXMLと異なり、Twitterなどで使われているJSON形式のドキュメントはデータ量が少ないため解析しやすいです。

 

 

 

正規表現

 

 Webスクレイピングにおける関門の一つが、収集した大量にWebデータから自分の分析課題に沿ったデータを抽出することです。

 

データ抽出は、上述したXPathを使って抽出するのが一般的ですが、もう少し小さい単位の情報に注目して抽出したい場合は、規則的な要素(数詞や名前など)に注目して抽出することもあります。

 

 

こうした規則的な要素を抽出するために使われる技術が『正規表現』と言われるものです。

 

『正規表現』とはテキスト中において繰り返し使用されるような表現を特定するための抽象的文字列です。

 

必要とする情報がWebドキュメント内に散らばっていた場合マークアップ言語のXPathだけでは抽出するのが困難な場合があり、こういうときに正規表現で抽出するというやり方が有効になります。

 

 

テキストマイニング

 

テキストデータを正規表現やHTMLのタグに基づいて抽出するだけではなく、単語の使われた方などで抽出する技術の総称をテキストマイニングと言います。

 

これは非構造化データなどにおいてとても有効な分析手法になります。

 

 

 

SQL

 

 Amazonや楽天などのオンラインショッピング、銀行振り込みなど私たちが今尾ネット社会で何気なく利用しているサービスの背後には、データベースの存在の存在があります。

 

サービスの恩恵を享受する側だとデータベースの存在がどれだけ重要かというのがイマイチピンときませんが、データベースはWebサービスを成立させる上においてなくなてはならない存在だと言えます。

 

そしてデータ収集という点においても、データを個々に集める場合やオンライン上で共同作業する場合など、データはまとめて保存されていた方が都合がいいので、収集したデータをまとめてデータベースとして構築しておくことが多いです。

 

そしてこのデータベースの操作において使われる言語がSQLです。これは今の社会では必須の技術だと言えます。

 

 

 

 

 

 

 

 

 

WEB上でデータを配信技術のまとめ(http・HTML・XML・AJAX・JSON)

 

 

 

HTML

 

 GooglechromeやFirefoxなどのインターネットブラウザでWebページを表示する際、その情報をどのようにして書くのかという構造基準が存在しています。

 

これがハイパーテキストマークアップ言語、いわゆる『HTML』というやつです。

 

これはWikipediaからTwitter・無料ブログにまで幅広く使われているもので、私たちがインターネットサーフィンを行う上で欠かせない技術です。

 

 

【Web技術】スクレイピングする上で抑えておきたいHTMLの基本的な仕組み

 

 

 

XML

 

 XMLは拡張マークアップ言語のことで、Web上でデータを配信するための標準的な技術です。

 

HTMLがWEB上のデータを見栄え良く表示するのに長けたものであるのに対して、『XML』は決められたタグに従ってデータを保存することに長けたフォーマットです。

 

XMLはユーザーがタグを自由に定義できるため、データ保存という点ではHTMLより優れていると言えます。

 

ウェブスクレイピングをする上においてXMLの理解は必須と言えます。

 

【Web技術】XMLとは何なのか? - 暇人の研究室

【R言語】XMLパッケージでWebスクレイピングしてみる

 

 

 

JSON

 

 JSON(Java Script Object Notation)はXMLと同じようにWeb上におけるデータ保存フォーマットの一つです。

 

現在のインターネット界隈では、『XML』と『JSON』がテキストデータ保存における標準フォーマットになっています。

 

『JSON』はRえおはじめとしてプログラミング言語との相性がいいことからWeb開発者から一定の支持を得ています。

 

ちなみにTwitterはJSONを使っているので、Twitterのテキストデータをスクレイピングしてテキストマイニングやトレンド分析を行う場合は『JSON』の理解が必須と言えるでしょう。

 

 

 

HTTP

 

 Webから情報を習得するためには端末とサーバー間で通信を行うことが必要です。この通信において使われる言語が、『HTTP』(ハイパーテキスト転送プロトコル)です。

 

つまりHTMLやXMLで表現されたWEBページは全てHTTPによって配信されています。

 

Webページのアドレスは、みんな『http:/~』から始まるようにhttpはインターネットにおいて当たり前の配信技術になっています。

 

ですが、これはコンピュータ側が勝手に処理しているので、私たちユーザーが気に掛ける必要はあまりないと思います。

 

 

 

 

 

 

 

AJAX

 

 AJAXは生放送などのリアムタイムデータ配信において表示を動的に変化させる必要のあるコンテンツによく使われる最新Webテクノロジーです。