アメブロのブログ記事をスクレイピングで全件取得する方法
1日遅れてしまいましたがアドベントカレンダー22日目です。タイトルの通り、ある特定のユーザーのブログ記事全てを取得する方法について書きたいと思います。よろしくお願いします。
目的
- 声優のブログ自動生成を行う為、ブログ記事全てを取得する必要がある
- 下記の記事で方法は書いてあったが、それだけだと学びがないのでPython3で行う
結果
まず初めに、麻倉もものブログで試しましたが、↓の記事のタイトルにある"/"によって指定したパスがおかしくなりエラーが出る。
次に雨宮天で試すも、同じくタイトルに"/"のある記事が存在するためエラーが発生する。
最後に夏川椎菜で試したところ、タイトルに"/"を使用した記事がなかったようで、全件取得することができました。
コード
稚拙なコードでありますが、コピペして実行すると夏川椎菜のブログ記事全てを取得することができます。お試しください。
- Scraping.py
# coding:utf-8 import re import requests from bs4 import BeautifulSoup def get_entry_list(html): url_list = [html] while True: html = requests.get(html).content soup = BeautifulSoup(html, "lxml") next_page = soup.find("a", {"class", "skinSimpleBtn pagingNext"}) if isinstance(next_page, type(None)): print("finish") return url_list else: url_list.append(next_page["href"]) html = next_page["href"] def get_url(entry_list): page_list = [] for html in entry_list: html = requests.get(html).content soup = BeautifulSoup(html, "lxml") text = soup.find_all("a", {"class", "contentTitle"}) page_list.append(text) print("finish") return page_list def cleanhtml(raw_html): cleanr = re.compile("<.*?>") cleantext = re.sub(cleanr, "", raw_html) return cleantext def scraping(all_entry_list, BASE_DIRE): for entry_list in all_entry_list: for url in entry_list: title = url.string with open("{dir}{title}.txt".format(dir=BASE_DIRE, title=title), "w") as file: html = requests.get(url["href"]).content soup = BeautifulSoup(html, "lxml") div_text = soup.find("div", {"class", "articleText"}) text = cleanhtml(str(div_text)).strip() print("Written file: {0}.txt".format(title)) file.write(text) print("finish")
- createFiles
from Scraping import get_url, get_entry_list, scraping name_list = {"Asakura_Momo": "asakuramomoblog", "Amamiya_Sora": "amamiyasorablog", "Natukawa_Shiina": "natsukawashiinablog"} blog_id = name_list["Natukawa_Shiina"] url = "http://ameblo.jp/{0}/entrylist.html".format(blog_id) BASE_DIRE = "/Users/username/XXXXXXXXXXXXXX/data/{0}/".format("Natukawa_Shiina") all_entry_list = get_entry_list(url) page_list = get_url(all_entry_list) scraping(page_list, BASE_DIRE)
追記(2017/01/12)
結局、re.subを使ってtitleからスラッシュをとる方法で他の二人も全件取得しました。
def cleanslash(blog_title): cleanr = re.compile("/") cleantext = re.sub(cleanr, "", blog_title) return cleantext
麻倉ももについての説明とブログのスクレイピング
声優 Advent Calendar 2016 - Adventar
声優アドベントカレンダー21日目です。21日目です
麻倉ももさんについての説明と、アメブロのブログをPythonでスクレイピングしたという内容を行います。急いで書いたので文字数がないです。よろしくお願いいたします。
麻倉ももとは
2011年に、スフィアが所属する芸能事務所ミュージックレインが開催した「第2回ミュージックレインスーパー声優オーディション」で合格し、同期の雨宮天、夏川椎菜と共に人気急上昇中の女性声優ユニット「TrySail」のメンバーの一人として活躍する今大注目の声優の一人です。最近ではソロデビューも行い、オリコン初動売上[1]がなんと13,390枚という数字を叩き出し、見事4位の座を勝ち取りました。
麻倉ももの魅力
麻倉ももさんのその美貌もさることながら、最も魅力的なところは天然の言動でしょう。
ニコニコ超会議で行われたアイドルマスターの生放送中に、ひたすら肉まんを食べ続けて舞台上にいた下田麻美さんの声にも気づかなかったり、「最も強い動物は?」という質問を絵で答えるコーナーにおいて、一人だけ「ライオン」と文字で回答したりするなどといったアスペ天然な言動で、周囲を和ませることが彼女の一番の魅力だと思います。
もちょっとおしゃべりについて
麻倉ももさんも他の声優と同じくブログを行っております。
あまりにも突飛すぎる文章内容で有名です。 その内容の突飛さゆえにまとめブログが書かれたり、TrySailのニコ生で本人がブログの内容を解説することも起きるほど。ブログの内容が気になる方は、麻倉ももオフシャルブログ「もちょっとおしゃべり」をご覧ください。
もちょブログの書き方
稚拙ですが、最低限のルールとしては以下を遵守する必要があります。
- 美味しいをやみーと置換する
- 改行を多用する
- (●・▽・●) を使用する
- ブログの最後に下記の結びの言葉が必要
... 終わりだよ〜 もちょ
以上の点を守ることができたら、あなたももちょブログを書くことが可能かもしれません。
スクレイピング
下に埋め込みされたブログ記事をスクレイピングし、文章の部分だけを取得しました。
コードは以下の通りです。
import re import requests from bs4 import BeautifulSoup def cleanhtml(raw_html): cleanr = re.compile("<.*?>") cleantext = re.sub(cleanr, "", raw_html) return cleantext def scraping(html): html = requests.get(html).content soup = BeautifulSoup(html, "lxml") text = soup.find("div", {"class", "articleText"}) return cleanhtml(str(text)).strip() url = "http://ameblo.jp/asakuramomoblog/entry-11886300303.html" str_list = scraping(html=url).splitlines() text = ''.join(str_list) print(text)
追記
これだけだと味気ないのでMeCabを使って形態素解析をかけてみました。
... import MeCab m = MeCab.Tagger("-Ochasen") print(m.parse(text))
結果
もうすぐ モウスグ もうすぐ 副詞-一般 6月 ロクガツ 6月 名詞-固有名詞-一般 終わり オワリ 終わる 動詞-自立 五段・ラ行 連用形 だ ダ だ 助動詞 特殊・ダ 基本形 よ ヨ よ 助詞-終助詞 ~( ~( ~( 名詞-サ変接続 o o o 名詞-一般 ・ ・ ・ 記号-一般 ∇ ∇ ∇ 名詞-サ変接続 ・ ・ ・ 記号-一般 o o o 名詞-固有名詞-組織 )/ )/ )/ 名詞-サ変接続 梅雨 ツユ 梅雨 名詞-一般 も モ も 助詞-係助詞 もう モウ もう 副詞-一般 終わり オワリ 終わる 動詞-自立 五段・ラ行 連用形 か カ か 助詞-副助詞/並立助詞/終助詞 な ナ な 助詞-終助詞 ~? ~? ~? 名詞-サ変接続 涼しい スズシイ 涼しい 形容詞-自立 形容詞・イ段 基本形 し シ し 助詞-接続助詞 、 、 、 記号-読点 梅雨 ツユ 梅雨 名詞-一般 好きなんだけど スキナンダケド 好きなんだけど 名詞-固有名詞-一般 カミナリ カミナリ カミナリ 名詞-一般 すごい スゴイ すごい 形容詞-自立 形容詞・アウオ段 基本形 よ ヨ よ 助詞-終助詞 ね ネ ね 助詞-終助詞 ーー ーー ーー 名詞-一般 (* (* (* 名詞-サ変接続 ゜ ゜ ゜ 記号-一般 0 0 0 名詞-数 ゜ ゜ ゜ 記号-一般 ) ) ) 名詞-サ変接続 さっき サッキ さっき 名詞-副詞可能 私 ワタシ 私 名詞-代名詞-一般 の ノ の 助詞-連体化 とこ トコ とこ 名詞-一般 に ニ に 助詞-格助詞-一般 落ち オチ 落ちる 動詞-自立 一段 連用形 て テ て 助詞-接続助詞 き キ くる 動詞-非自立 カ変・クル 連用形 て テ て 助詞-接続助詞 びっくり ビックリ びっくり 名詞-サ変接続 ーーーー ーーーー ーーーー 名詞-一般 (* (* (* 名詞-サ変接続 ゜ ゜ ゜ 記号-一般 0 0 0 名詞-数 ゜ ゜ ゜ 記号-一般 ) ) ) 名詞-サ変接続 ぎゃ ぎゃ ぎゃ 名詞-一般 ー ー ー 名詞-一般 っ ッ く 動詞-非自立 五段・カ行促音便 連用タ接続 ! ! ! 記号-一般 ! ! ! 記号-一般 ! ! ! 記号-一般 ! ! ! 記号-一般 ! ! ! 記号-一般 でも デモ でも 接続詞 その ソノ その 連体詞 おかげ オカゲ おかげ 名詞-一般 で デ で 助詞-格助詞-一般 ぽち ポチ ぽち。 名詞-固有名詞-一般 ぽち ポチ ぽち。 名詞-固有名詞-一般 なおっ ナオッ なおる 動詞-自立 五段・ラ行 連用タ接続 た タ た 助動詞 特殊・タ 基本形 ー ー ー 名詞-一般 ! ! ! 記号-一般 よかっ ヨカッ よい 形容詞-自立 形容詞・アウオ段 連用タ接続 た タ た 助動詞 特殊・タ 基本形 ~( ~( ~( 名詞-サ変接続 o o o 名詞-一般 ・ ・ ・ 記号-一般 ∇ ∇ ∇ 名詞-サ変接続 ・ ・ ・ 記号-一般 o o o 名詞-固有名詞-組織 ) ) ) 名詞-サ変接続 わ ワ わ 助詞-終助詞 ー ー ー 名詞-一般 早く ハヤク 早い 形容詞-自立 形容詞・アウオ段 連用テ接続 やん ヤン やむ 動詞-自立 五段・マ行 連用タ接続 で デ で 助詞-接続助詞 ーーーーーーーーーーー ーーーーーーーーーーー ーーーーーーーーーーー 名詞-一般 そんな ソンナ そんな 連体詞 感じ カンジ 感じ 名詞-一般 ~(● ~(● ~(● 名詞-サ変接続 ・ ・ ・ 記号-一般 ▽ ▽ ▽ 記号-一般 ・ ・ ・ 記号-一般 ●)♪♪ ●)♪♪ ●)♪♪ 名詞-サ変接続 それ ソレ それ 名詞-代名詞-一般 は ハ は 助詞-係助詞 そう ソウ そう 副詞-助詞類接続 と ト と 助詞-副詞化 ! ! ! 記号-一般 この コノ この 連体詞 あいだ アイダ あいだ 名詞-副詞可能 誕生 タンジョウ 誕生 名詞-サ変接続 日 ビ 日 名詞-接尾-一般 に ニ に 助詞-格助詞-一般 連れ ツレ 連れる 動詞-自立 一段 連用形 て テ て 助詞-接続助詞 っ ッ く 動詞-非自立 五段・カ行促音便 連用タ接続 て テ て 助詞-接続助詞 もらっ モラッ もらう 動詞-非自立 五段・ワ行促音便 連用タ接続 た タ た 助動詞 特殊・タ 基本形 お オ お 接頭詞-名詞接続 寿司 スシ 寿司 名詞-一般 だ ダ だ 助動詞 特殊・ダ 基本形 よ ヨ よ 助詞-終助詞 ~(● ~(● ~(● 名詞-サ変接続 ・ ・ ・ 記号-一般 ▽ ▽ ▽ 記号-一般 ・ ・ ・ 記号-一般 ●) ●) ●) 名詞-サ変接続 うーん ウーン うーん 感動詞 、 、 、 記号-読点 べり ベリ べり 名詞-接尾-一般 ー ー ー 名詞-一般 や ヤ や 助詞-並立助詞 み ミ み 接頭詞-名詞接続 ~+。:.+。(*´ ~+。:.+。(*´ ~+。:.+。(*´ 名詞-サ変接続 p p p 名詞-一般 ∀ ∀ ∀ 名詞-サ変接続 q q q 名詞-一般 `) `) `) 名詞-サ変接続 ほんとに ホントニ ほんとに 副詞-一般 ね ネ ね 助詞-終助詞 ! ! ! 記号-一般 感動 カンドウ 感動 名詞-サ変接続 し シ する 動詞-自立 サ変・スル 連用形 た タ た 助動詞 特殊・タ 基本形 !(* !(* !(* 名詞-サ変接続 ゜ ゜ ゜ 記号-一般 0 0 0 名詞-数 ゜ ゜ ゜ 記号-一般 ) ) ) 名詞-サ変接続 し シ する 動詞-自立 サ変・スル 連用形 あわ アワ あう 動詞-非自立 五段・ワ行促音便 未然形 せ セ せる 動詞-接尾 一段 連用形 ~ ~ ~ 名詞-サ変接続 魚 ギョ 魚 名詞-接尾-一般 の ノ の 助詞-連体化 海 ウミ 海 名詞-一般 に ニ に 助詞-格助詞-一般 おぼれ オボレ おぼれる 動詞-自立 一段 連用形 た タ た 助動詞 特殊・タ 基本形 ~ ~ ~ 名詞-サ変接続 い イ いる 動詞-非自立 一段 連用形 。 。 。 記号-句点 :.+。(*´ :.+。(*´ :.+。(*´ 名詞-サ変接続 p p p 名詞-一般 ∀ ∀ ∀ 名詞-サ変接続 q q q 名詞-一般 `)… `)… `)… 名詞-サ変接続 あれ アレ ある 動詞-自立 五段・ラ行 命令e ? ? ? 記号-一般 じゃあ ジャア じゃあ 接続詞 魚 サカナ 魚 名詞-一般 に ニ に 助詞-格助詞-一般 なれ ナレ なる 動詞-自立 五段・ラ行 仮定形 ば バ ば 助詞-接続助詞 いい イイ いい 形容詞-自立 形容詞・イイ 基本形 の ノ の 名詞-非自立-一般 か カ か 助詞-副助詞/並立助詞/終助詞 な ナ な 助詞-終助詞 ~?( ~?( ~?( 名詞-サ変接続 ・ ・ ・ 記号-一般 ρ ロー ρ 記号-アルファベット ・ ・ ・ 記号-一般 *) *) *) 名詞-サ変接続 よーし ヨーシ よーし 感動詞 、 、 、 記号-読点 なろ ナロ なる 動詞-自立 五段・ラ行 未然ウ接続 ー ー ー 名詞-一般 っと ット っと 助詞-格助詞-引用 !(-^〇^-) !(-^〇^-) !(-^〇^-) 名詞-サ変接続 あ ア あ フィラー でも デモ でも 接続詞 ネズミ ネズミ ネズミ 名詞-一般 に ニ に 助詞-格助詞-一般 なろ ナロ なる 動詞-自立 五段・ラ行 未然ウ接続 ー ー ー 名詞-一般 っと ット っと 助詞-格助詞-引用 ! ! ! 記号-一般 私 ワタシ 私 名詞-代名詞-一般 は ハ は 助詞-係助詞 うに ウニ うに 名詞-一般 が ガ が 助詞-格助詞-一般 1番 イチバン 1番 名詞-固有名詞-一般 好き スキ 好き 名詞-接尾-形容動詞語幹 な ナ だ 助動詞 特殊・ダ 体言接続 ん ン ん 名詞-非自立-一般 だ ダ だ 助動詞 特殊・ダ 基本形 ~( ~( ~( 名詞-サ変接続 o o o 名詞-一般 ・ ・ ・ 記号-一般 ∇ ∇ ∇ 名詞-サ変接続 ・ ・ ・ 記号-一般 o o o 名詞-固有名詞-組織 ) ) ) 名詞-サ変接続 へ ヘ へ 助詞-格助詞-一般 へ ヘ へ 助詞-格助詞-一般 だ ダ だ 助動詞 特殊・ダ 基本形 から カラ から 助詞-接続助詞 このあいだ コノアイダ このあいだ 名詞-副詞可能 の ノ の 助詞-連体化 こんぶ コンブ こんぶ 名詞-一般 いっぱい イッパイ いっぱい 名詞-接尾-副詞可能 食べ タベ 食べる 動詞-自立 一段 連用形 てる テル てる 動詞-非自立 一段 基本形 よー ヨー よー 助詞-終助詞 ! ! ! 記号-一般 !(。` !(。` !(。` 名詞-サ変接続 ・ ・ ・ 記号-一般 ∀ ∀ ∀ 名詞-サ変接続 ・ ・ ・ 記号-一般 ´)⊃ ´)⊃ ´)⊃ 名詞-サ変接続 うに ウニ うに 名詞-一般 食べ タベ 食べる 動詞-自立 一段 未然形 られる ラレル られる 動詞-接尾 一段 基本形 の ノ の 名詞-非自立-一般 は ハ は 助詞-係助詞 おとな オトナ おとな 名詞-一般 な ナ だ 助動詞 特殊・ダ 体言接続 ん ン ん 名詞-非自立-一般 だって ダッテ だって 助詞-副助詞 ~(。` ~(。` ~(。` 名詞-サ変接続 ・ ・ ・ 記号-一般 ∀ ∀ ∀ 名詞-サ変接続 ・ ・ ・ 記号-一般 ´) ´) ´) 名詞-サ変接続 へっ ヘッ へる 動詞-自立 五段・ラ行 連用タ接続 で デ で 助詞-接続助詞 も モ も 助詞-係助詞 全部 ゼンブ 全部 名詞-副詞可能 すき スキ すき 名詞-一般 かも カモ かも 助詞-副助詞 ~(-^〇^-) ~(-^〇^-) ~(-^〇^-) 名詞-サ変接続 みんな ミンナ みんな 名詞-代名詞-一般 は ハ は 助詞-係助詞 なに ナニ なに 名詞-代名詞-一般 が ガ が 助詞-格助詞-一般 好き スキ 好き 名詞-形容動詞語幹 ~???? ~???? ~???? 名詞-サ変接続 それ ソレ それ 名詞-代名詞-一般 は ハ は 助詞-係助詞 そう ソウ そう 副詞-助詞類接続 と ト と 助詞-副詞化 ! ! ! 記号-一般 LINE ライン LINE 名詞-固有名詞-一般 知っ シッ 知る 動詞-自立 五段・ラ行 連用タ接続 て テ て 助詞-接続助詞 ます マス ます 助動詞 特殊・マス 基本形 か カ か 助詞-副助詞/並立助詞/終助詞 ~?( ~?( ~?( 名詞-サ変接続 o o o 名詞-一般 ・ ・ ・ 記号-一般 ∇ ∇ ∇ 名詞-サ変接続 ・ ・ ・ 記号-一般 o o o 名詞-固有名詞-組織 ) ) ) 名詞-サ変接続 中高 ナカダカ 中高 名詞-一般 の ノ の 助詞-連体化 時 トキ 時 名詞-非自立-副詞可能 の ノ の 助詞-連体化 友達 トモダチ 友達 名詞-一般 と ト と 助詞-格助詞-一般 いっぱい イッパイ いっぱい 副詞-一般 はなし ハナシ はなす 動詞-自立 五段・サ行 連用形 た タ た 助動詞 特殊・タ 基本形 ん ン ん 名詞-非自立-一般 だ ダ だ 助動詞 特殊・ダ 基本形 ~(● ~(● ~(● 名詞-サ変接続 ・ ・ ・ 記号-一般 ▽ ▽ ▽ 記号-一般 ・ ・ ・ 記号-一般 ●)(● ●)(● ●)(● 名詞-サ変接続 ・ ・ ・ 記号-一般 ▽ ▽ ▽ 記号-一般 ・ ・ ・ 記号-一般 ●)(● ●)(● ●)(● 名詞-サ変接続 ・ ・ ・ 記号-一般 ▽ ▽ ▽ 記号-一般 ・ ・ ・ 記号-一般 ●) ●) ●) 名詞-サ変接続 わーい ワーイ わーい 感動詞 めっちゃ メッチャ めっちゃ 副詞-一般 笑っ ワラッ 笑う 動詞-自立 五段・ワ行促音便 連用タ接続 ちゃっ チャッ ちゃう 動詞-非自立 五段・ワ行促音便 連用タ接続 た タ た 助動詞 特殊・タ 基本形 ーー ーー ーー 名詞-一般 ! ! ! 記号-一般 ! ! ! 記号-一般 ! ! ! 記号-一般 ごみ ゴミ ごみ 名詞-一般 の ノ の 助詞-連体化 投げ ナゲ 投げる 動詞-自立 一段 連用形 あ ア あ フィラー いっこ イッコ いっこ 名詞-サ変接続 し シ する 動詞-自立 サ変・スル 連用形 た タ た 助動詞 特殊・タ 基本形 よ ヨ よ 助詞-終助詞 ~ ~ ~ 名詞-サ変接続 そんな ソンナ そんな 連体詞 感じ カンジ 感じ 名詞-一般 ~♪♪♪ ~♪♪♪ ~♪♪♪ 名詞-サ変接続 よーし ヨーシ よーし 感動詞 ! ! ! 記号-一般 かわいい カワイイ かわいい 形容詞-自立 形容詞・イ段 基本形 動物 ドウブツ 動物 名詞-一般 で デ で 助詞-格助詞-一般 も モ も 助詞-係助詞 み ミ みる 動詞-自立 一段 連用形 て テ て 助詞-接続助詞 癒さ イヤサ 癒す 動詞-自立 五段・サ行 未然形 れ レ れる 動詞-接尾 一段 連用形 よー ヨー よー 助詞-終助詞 っと ット っと 助詞-格助詞-引用 !+。:.+。(*´ !+。:.+。(*´ !+。:.+。(*´ 名詞-サ変接続 p p p 名詞-一般 ∀ ∀ ∀ 名詞-サ変接続 q q q 名詞-一般 `) `) `) 名詞-サ変接続 どろん ドロン どろん 名詞-一般 っ ッ く 動詞-非自立 五段・カ行促音便 連用タ接続 終わり オワリ 終わる 動詞-非自立 五段・ラ行 連用形 だ ダ だ 助動詞 特殊・ダ 基本形 よ ヨ よ 助詞-終助詞 ~ ~ ~ 名詞-サ変接続 も モ も 助詞-係助詞 ちょ チョ ちょ 名詞-動詞非自立的 EOS
寿司 虚空編 -Sushi Kokuu Hen- 002 を Haskellで組んだ
アンヨヨンヨカレンダー15日目です。1時間ぐらいかけて作りました。
概要
これの式をHaskellで求めるプログラムを作った。 解説については漫画を読むかググってください。
コード
module Main where f n = n + 1 b m n | m < n && m == 0 = f n | m > n && n == 0 = b (m - 1) (n + 1) | m > 0 && n > 0 = b m (b (m + 1) n) g x = b x x main :: IO () main = do print $ g 3
結果
今度直します
追記
式が間違えていたので修正しました。
module Main where f n = n + 1 b m n | m < n && m == 0 = f n | m > 0 && n == 0 = b (m - 1) 1 | m > 0 && n > 0 = b (m - 1) (b m (n - 1)) g x = b x x main :: IO () main = do print $ g 3
これで61が出力されました。
おまけ
今回のコードです。
Python3で簡単にMFCCを求める方法
アドベントカレンダー12日目です。下の記事のPython3系で行うため、MFCCを求める手段で挫折したことの記録。
経緯
- Qiitaの記事を見たので僕もやりたいぞ
- -> Python2系は使いたくない
- -> なら、3系でやるか
つまづいたこと
上記の記事はO'Reilly Japan - 実践 機械学習システムを参考に行っており、音声認識の特徴量としてMFCCを求める際、scikits.talkboxというライブラリを使用していました。
当初は僕も同じようにライブラリを使おうと思いましたがうまく使えず、2to3というコマンドで3系に置き換えてもダメでしたので断念。MFCCを求めるプログラムを自分で実装しようと考え、下の記事を読みながらわかんねえわかんねえと叫ぶ。
結局
python_speech_featuresというライブラリを見つける。 Welcome to python_speech_features’s documentation! — python_speech_features 0.1.0 documentation
このライブラリを使ったサンプルコードです。
from scipy import io from scipy.io import wavfile from python_speech_features import mfcc data = io.wavfile.read('xxxx.wav') ceps = mfcc(data)
これで簡単にMFCCを求めることができました。
HaskellにおけるMainについて
Haskell始めました
数学を勉強したい気持ちと関数型を学びたいという気持ちの二つがあり、知り合いに勧められてHaskellを始めました。 現在、The Haskell Road to Logic, Maths and Programmingをゆっくり翻訳しながら読んでおります。 基礎の基礎ですが、そこでわからないことがあったのでメモ代わりに書きます。
スクリプトファイル
これまでghciでの動きしか見ていなかったので、スクリプトファイルの実行は試していませんでした。 Atomを起動し、いざ書こうとするも、ただ数字を書くのではなくmainが必要とのことでした。
module Main where main :: IO () main = putStrLn "Hello World"
module Main where
自作のモジュール Mainを定義したものです。where句は補助関数定義として活用しますが今回はHello Worldを出すだけなので定義する補助関数はありません この一行はなくても問題ありません。
main :: IO
main関数にIO型モナドの型を与えます。 今現在、僕がモナドについて理解度が低いので説明はこれぐらいにしてください。
main = putStrLn "Hello World"
main関数の処理を書きます。これをアクションと呼び、今回では Hello Worldを出力します。
GraphQLについて
アドベントカレンダー8日目です。公開した日は12月9日ですが、8日目です。 今回はGraphQLについて書きたいと思います。と言っても下を読んだことのメモみたいなものですが。
GraphQLとは?
- GraphQLはAPIのためのクエリ言語で、 データ用に定義した型システムを使用してクエリを実行するためのサーバー側のランタイム。
- GraphQLは特定のデータベースまたはストレージエンジンに結びついておらず、代わりに既存のコードとデータに基づく。
- GraphQLサービスは、これらの型の型とフィールドを定義し、各型の各フィールドに関数を提供することによって作成される。
たとえば、ログインしているユーザが(me)であることと、そのユーザの名前を示すGraphQLサービスは、次のようになります。
type Query { me: User } type User { id: ID name: String }
function Query_me(request) { return request.auth.user; } function User_name(user) { return user.getName(); }
- GraphQLサービス(通常はWebサービス上のURL)が実行されると、GraphQLクエリを送信して検証および実行することが可能
- 受信されたクエリは、定義された型とフィールドのみを参照していることを確認するためにまずチェックされ、次に提供された関数が実行され結果が生成される。
{ me { name } }
Could produce the JSON result:
{ "me": { "name": "Luke Skywalker" } }
かなり直感的にクエリを叩けるのはいいかなと思います。最近ではRESTfulではなく、GraphQLが次のトレンドになるとまで言われており、今後注目の言語じゃないかと思います。
Jenkinsの構築をしてみたかった
※導入しかしていません。
上のアドベントカレンダー4日目の記事です。
Jenkinsの構築をさっさと構築する方法です。
環境何も用意してなくて面倒だったので、OS Xで行います。
導入
まず最初にインストールを行います。
Macはbrewが入っているならばすぐに入ります。
brew install jenkins
これでインストールは終わります。
あとはサービスを起動すればブラウザでhttp://localhost:8080/で開けばJenkinsが動いていることが確認できます。
brew services start jenkins
最初に初期用のパスワードを求められるので、パスワードが置いてあるcatかlessを使用して /Users/username/.jenkins/secrets/initialAdminPasswordの中身をみましょう。
そうすると下の画面が出ます。今回はプラグインを選択するつもりはないので、推奨の青いほうを選択しましょう。
しばらく時間をおくとアカウント登録の画面に切り替わるので入力すると完了です。
機会があれば、githubとの連携とか自動化とかやります。たぶん。