feature image

2024年3月22日 | ブログ記事

ブログリレーに何書けばいいかわからない

この記事は2024年度traP新歓ブログリレー 15日目の記事です。

22Bのikura-hamuです。ブログリレーに何書けばいいかわからなかったので、ブログリレーテーマジェネレーターを作りました。

ページ: https://blog-relay-generator.trap.show/
リポジトリ: https://github.com/ikura-hamu/blog-relay-generator

ブログリレーテーマジェネレーター
GitHub - ikura-hamu/blog-relay-generator: ブログリレー テーマジェネレーター
ブログリレー テーマジェネレーター. Contribute to ikura-hamu/blog-relay-generator development by creating an account on GitHub.

できること

  1. テーマを生成する
  2. テーマをクリップボードにコピーする
  3. テーマに「これすき」を押す
  4. 他の人の「これすき」一覧を見る

----------2024-03-03-151501
----------2024-03-03-153301

しくみ

今話題の生成AIではなく、地味なことをやっています。

タイトルの抽出

traPのブログをスクレイピングして、タイトルを抜き出します。HTMLからいい感じに<title>要素を抜き取っています。

func scrape(client *http.Client, i int) string {
	req := &http.Request{
		Method: http.MethodGet,
		URL:    &url.URL{Scheme: "https", Host: "trap.jp", Path: fmt.Sprintf("/post/%d", i)},
	}
	res, err := client.Do(req)
	if err != nil {
		log.Println(err)
	}
	defer res.Body.Close()

	tk := html.NewTokenizer(res.Body)

	var title string
	for {
		tokenType := tk.Next()
		if tokenType == html.ErrorToken {
			break
		}

		tagName, _ := tk.TagName()
		if bytes.Equal(tagName, []byte("title")) && tokenType == html.StartTagToken {
			_ = tk.Next()
			title = string(bytes.TrimRight(bytes.TrimSpace(tk.Text()), "| 東京工業大学デジタル創作同好会traP"))
			break
		}
	}

	return title
}

形態素解析

あとで出てくるkagomeを使ってタイトルを単語に分割し、それぞれの品詞を調べます。例えば『【 #ISUCON 】 最近の若者は ssh しないらしいですよ』ならこんな感じです。

【      記号,括弧開,*,*,*,*,【,【,【
        記号,空白,*,*,*,*,*
#       名詞,サ変接続,*,*,*,*,*
ISUCON  名詞,固有名詞,組織,*,*,*,*
        記号,空白,*,*,*,*,*
】      記号,括弧閉,*,*,*,*,】,】,】
        記号,空白,*,*,*,*,*
最近    名詞,副詞可能,*,*,*,*,最近,サイキン,サイキン
の      助詞,連体化,*,*,*,*,の,ノ,ノ
若者    名詞,一般,*,*,*,*,若者,ワカモノ,ワカモノ
は      助詞,係助詞,*,*,*,*,は,ハ,ワ
        記号,空白,*,*,*,*,*
ssh     名詞,固有名詞,組織,*,*,*,*
        記号,空白,*,*,*,*,*
し      動詞,自立,*,*,サ変・スル,未然形,する,シ,シ
ない    助動詞,*,*,*,特殊・ナイ,基本形,ない,ナイ,ナイ
らしい  助動詞,*,*,*,形容詞・イ段,基本形,らしい,ラシイ,ラシイ
です    助動詞,*,*,*,特殊・デス,基本形,です,デス,デス
よ      助詞,終助詞,*,*,*,*,よ,ヨ,ヨ

左が単語で、右が品詞や読みなどの情報です。ハッシュタグ#がサ変接続の名詞になっているなど完璧ではないですが、ここでは目をつむります。最初は情報の一番最初のざっくりしたくくりの品詞、「最近」であれば「名詞」だけを使おうとしましたが、精度がいまいちで意味のある文章がなかなかできなかったので、もう一つ情報を増やして、「最近」であれば「(名詞,副詞可能)」として扱うようにしました。

ここから二つの情報をデータベースに入れます。
一つ目はそれぞれの単語の品詞、もう一つはブログリレーのタイトルとして存在する品詞の並びです。この『【 #ISUCON 】 最近の若者は ssh しないらしいですよ』であれば、19個の単語・記号に分割できたので、単語と品詞の対応を19個データベースに挿入し、品詞の列の情報として、
(記号,括弧開)(記号,空白)(名詞,サ変接続)(名詞,固有名詞)(記号,空白)(記号,括弧閉)(記号,空白)(名詞,副詞可能)(助詞,連体化)(名詞,一般)(助詞,係助詞)(記号,空白)(名詞,固有)(記号,空白)(動詞,自立)(助動詞,*)(助動詞,*)(助動詞,*)(助詞,終助詞) をデータベースに入れます。

テーマを生成する

リクエストが来たら、まずは品詞の列からランダムに一つ選びます。その後、列の先頭から順番に、その品詞を持つ単語をランダムに選び、くっつけてテーマを生成します。

これによって、「ブログリレーで過去に使われた文型」の「ブログリレーで過去に使われた単語」でできた文章が生成されます。

生成されたテーマを見てみよう

リリース時に部員がたくさん遊んでくれて大量のテーマが生成されました。こちらのページから「これすき」が押されたテーマ一覧を見ることができます。
https://blog-relay-generator.trap.show/like

僕の好きないくつかのテーマを紹介します。

Discord 綺麗に納涼許さない

納涼はさせてほしいところです。575になっているのもお気に入りです。

TypeScript確定

確かにJavaScriptよりはいいかもしれません。

AdCのネタ...の創作

「AdC」は「アドベントカレンダー」の略です。アドベントカレンダーはクリスマス前の時期にやっているブログリレーです。まさにこの記事の内容です。

私のお基本って配列かもね☆・

配列人間ってことでしょうか。それとも配列をバックエンドとしたリストなんでしょうか。最後の「☆」がいいですね。

Gitea音楽

Gitea はGitのサービス(なんていうのかよくわからない)です。どんな音が鳴るのか気になります。サウンド班の人にぜひ作曲してほしいです。

ウイルスプログラミング作り71のコト

捕まります。

the writeup人生について

writeupは競プロやCTFの大会に参加した人がどんな感じで問題を解いたかを書く記事です。人生についてのwriteupはかなり気になります。「the」がついてるのもそれっぽくていいですね。

東急についての解説

東工大に入ると東急とは切っても切れない関係になります。大岡山キャンパスの目の前に東急ストアがありますし、特に電車で通学する人は毎日東急線に乗ることになります。案外新歓ブログリレーにふさわしい内容かもしれません。

使用技術

Goです。テンプレートを使って、サーバーアプリケーションから直接HTMLを配信しています。

Webフレームワーク: labstack/echo

いつものです。HTMLテンプレートの配信ははじめて使いました。

データベース: MariaDB

いつものです。部内PaaSであるNeoShowcaseのDBがMariaDBなので自動的に。

DBライブラリ: jmoiron/sqlx

SQL書くのが好きなのと、そんなに複雑なクエリを書かないこと、さくっと作りたかったことを踏まえて、sqlxになりました。シンプルなsqlx大好き。

形態素分析: ikawaha/kagome

日本語の文章を単語に分解して、品詞とかを教えてくれるライブラリです。以前のtraPのハッカソンで使ったことがあったので、今回も使いました。このライブラリを知らなかったら今回これを作ろうと考えなかったと思うので、日ごろからいろんなライブラリとか技術を見て回るの大事ですね。

(そのハッカソンの記事はこちら https://trap.jp/post/1899/)

デプロイ: NeoShowcase

部内PaaS基盤です。部内PaaS基盤ってすごいですよね。部内PaaS基盤です。

おわり

traPに入るとこうやってプログラミングをはじめとするいろんな技術で遊べます。楽しいですよ!

最後に開発中に出てきた一番のお気に入りのテーマを紹介します。

いい型......

...幸せ。

明日の新歓ブログリレーは @comaviusさんと@Kejunさんです。

ikura-hamu icon
この記事を書いた人
ikura-hamu

SysAd班、ゲーム班 いろいろやりたい

この記事をシェア

このエントリーをはてなブックマークに追加
共有

関連する記事

2021年8月12日
CPCTFを支えたWebshell
mazrean icon mazrean
2021年5月19日
CPCTF2021を実現させたスコアサーバー
xxpoxx icon xxpoxx
2024年3月22日
traPグラフィック班の活動紹介2024
haru10 icon haru10
2024年3月17日
⑨でもわかる8bitアレンジ講習会
vPhos icon vPhos
2024年3月15日
個人開発として2週間でWebサービスを作ってみた話 〜「LABEL」の紹介〜
Natsuki icon Natsuki
2024年3月11日
思想の強いゲーム制作をしよう!
Kirby0717 icon Kirby0717
記事一覧 タグ一覧 Google アナリティクスについて 特定商取引法に基づく表記