?

FutureとSeqのネストをフラットにする

やりたかったこと

val foo: Seq[Future[Seq[Int]]] 

Future[Seq[Int]]

にしたかった

scala> import scala.concurrent.ExecutionContext.Implicits._
import scala.concurrent.ExecutionContext.Implicits._

scala> val foo: Seq[Future[Seq[Int]]] = Seq(Future(Seq(1)))
foo: Seq[scala.concurrent.Future[Seq[Int]]] = List(Future(Success(List(1))))

scala>  Future.sequence(foo).map(_.flatten)
res1: scala.concurrent.Future[Seq[Int]] = Future(<not completed>)

でいけた!

PythonでWebスクレイピングした結果をリリイ文字にする

厨二病っぽい何かを作りたくて,リリィ・シュシュのすべてに出てくるあの文字列(知らない人はごめんなさいググって下さい) を使えたらいいなぁと思ってたらこんな記事を見つけた。

リリイラング(リリイ語)Pythonスクリプト - Az++.log

文字列をShift_JISエンコード👉それをMacOSRomanの文字コードとして読み込んで出力

やっていることとしては👆らしい。

$ python ../lily/lily.py エーテル
ÉGÅ[ÉeÉã《エーテル》

はじめはこれをjsを使ってタイピングしたらそのままリリイ文字になるSPAを作ろうとしたが、文字コードの変換がうまくできず一旦やめ。

htmlもjsもよくわからないpythonだけで解決させよう

そんな時Webスクレイピングのことを思い出した。

ならば、よしどっかから国際ニュースをスクレイピングしてリリイ文字にして 「それが世界の選択か…」みたいな感じにしよう

Webスクレイピングは👇を参考にしました PythonでさくっとWebスクレイピングする (JavaScript読み込みにも対応しつつ) - Qiita

スクレイピング👉リリイ文字に変換

以上

できたもの

$ /usr/local/bin/python scraping.py
ÉIÉoÉ}éÅ ÉVÉäÉAì‡êÌÇâ˜ç¶《オバマ氏 シリア内戦を悔恨》
ñpéÅë§ ã^òfÅuéñé¿Ç≈ÇÕǻǢÅv《朴氏側 疑惑「事実ではない」》
ïßëÂìùóÃëI ã…âEåÛï‚ÇÃèüéZÇÕ《仏大統領選 極右候補の勝算は》
íÜçë ïƒÇÃñ≥êlêˆêÖã@Çï‘ä“Ç÷《中国 米の無人潜水機を返還へ》
ÉgÉâÉìÉvéÅåÎéö ÉlÉbÉgëÂäÏÇ—《トランプ氏誤字 ネット大喜び》
ÉgÉâÉìÉvéÅåæìÆÇ…çãÇ≈îΩî≠《トランプ氏言動に豪で反発》
ÉgÉãÉRÇ≈é‘îöíeÉeÉç 14êléÄñSâfëú《トルコで車爆弾テロ 14人死亡映像》
92çŒÉÄÉKÉxëÂìùóà çƒëIèoînÇ÷《92歳ムガベ大統領 再選出馬へ》
ÉIÉoÉ}éÅ ÉVÉäÉAì‡êÌÇâ˜ç¶《オバマ氏 シリア内戦を悔恨》

「それが世界の選択か…」

以下コード

#!/usr/bin/env python
# -*- coding: utf-8 -*-

import lxml.html
import requests
import re


def convert(str):
     return unicode(unicode(str,"utf-8").encode("shift-jis"),"mac-roman").encode("utf-8") + "《" + str + "》"

def replace(str):
    return str.replace(u'写真','').replace(u'new','')

target_url = 'http://news.yahoo.co.jp/hl?c=c_int'
target_html = requests.get(target_url).text
root = lxml.html.fromstring(target_html)
for text in root.cssselect('#wrapper > #contents > #contentsBody > #main > #epTabTop a'):
    str = replace(text.text_content())
    print(convert(str.encode("utf-8")))

Yahooの国際ニュースからとってくるようにしたのですが、"写真"とか"new"などが入るためreplaceしている 2つのコードを組み合わせただけなので実質ほとんど書いていない。

あとがき

  • Webスクレイピングをはじめてやったのですが、もっといろんなことに使えそうだなぁと思った。(小並感)
  • リリイ文字変換をjsでできるようにして、Vue.jsとかを使ってリアルタイムに変換できる何かを作れないかもう少し頑張ってみたい。
  • Python2系の文字化けには以前散々苦しめられたのですが、その文字化けを意図的に操ることでこんなことができるとは思わなかった。