거친 wikipedia에서 오늘의 사건을 무작위로 얻는 slackbot
Elixir-Slack을 베이스로 개조를 더한 bot를 사내 slack에 상주시키고 있습니다.
최근에는 신기능 추가 자료에 곤란하고 있었습니다만, 문득 매일 아침 bot에 인사를 시켜, 드디어 wikipedia의 오늘의 사건을 투고시키려고 생각했습니다.
거칠기 때문에 상정한 wikipedia의 기술 룰 등이 무너지면 파탄합니다··.
wikipedia 오늘의 이벤트 페이지
wikipedia에는 월일로 검색하면 그 날에 일어난 사건 일람의 페이지를 표시할 수 있습니다.
URL로서는 「 https://ko.wikipedia.org/wiki/2월 27일 」(2월 27일의 경우)가 됩니다.
이 페이지에는, 이 월일에 일어난 역사적인 사건과 유명인의 생일 등이 실려 있습니다.
생일을 취득해도 재미있을 것 같았습니다만, 이번은 사건에 짜고 있습니다.
(bot의 출력으로, 「~의 날입니다」라고 편하게 내고 싶었습니다만, 생일은 인물명으로 문장이 끝나고 맞지 않았기 때문에)
HTML 보기
어떠한 법칙으로 퍼스 할 수 없는지 베가 서 있지 않는 베가 앉아서 완조하면서 HTML 전체를 바라봅니다.
실 서비스로 이용하는 것은 아니기 때문에, 가능한 한 저비용으로 편하게 만들고 싶다는 기분이 매우 강한 상태입니다.
퍼스 방법 결정
이 근처가 거친 부분.
실수로 다음 법칙을 깨닫습니다.
어떠한 법칙으로 퍼스 할 수 없는지 베가 서 있지 않는 베가 앉아서 완조하면서 HTML 전체를 바라봅니다.
실 서비스로 이용하는 것은 아니기 때문에, 가능한 한 저비용으로 편하게 만들고 싶다는 기분이 매우 강한 상태입니다.
퍼스 방법 결정
이 근처가 거친 부분.
실수로 다음 법칙을 깨닫습니다.
<li>
태그로 표현됩니다 (다른 항목 포함) <li>
태그 </li>
"로 끝납니다 이런 느낌입니까?
String.match?(x, ~r/^<li>.*/) && String.match?(x, ~r/。<\/li>/) && String.match?(x, ~r/ - /)
HTML을 처리하는 방법
여기도 거칠다··.
response.body
|> String.split("\n")
|> Enum.filter(fn(x) ->
String.match?(x, ~r/^<li>.*/) && String.match?(x, ~r/。<\/li>/) && String.match?(x, ~r/ - /)
end)
|> Enum.random()
그리고 잡혔다. · (땀
이벤트 행 처리
bot는 아래의 형태로 결국 이야기하고 싶습니다.
「出来事(XXX年) の日」
그러나 실제로 취할 수 있는 것은 이런 형태
<li><a href="/wiki/xxxxxxxxxx" title="YYYY年">YYYY年</a> - <a href="/wiki/xxxxxxxxxxxxxxxxxxxxxxxxx" title="hoge">hoge</a>: 出来事</li>
이런 식으로 처리합니다.
# 年と本文を切り分けてそれぞれ整形する(タグを除去)
splitLi = String.split(randomLi, " - ")
year = Enum.at(splitLi, 0)
year = String.replace(year, ~r/<.*?>/, "")
dekigoto = Enum.at(splitLi, 1)
dekigoto = String.replace(dekigoto, ~r/<.*?>/, "")
# 連結して結果を作成(長すぎるときは頭だけ返すようにしたい) TODO
result = dekigoto <> "(" <> year <> ")"
결과
거칠게 했던 것보다는 움직이고 있네요··.
단지 조금 평화적인 내용이 좋다··.
덤
언제나 같은 투고를 반복하는 bot은 어미라든지 일부를 바꾸면 조금뿐입니다만 재미가 된다고 생각합니다.
예를 들면 이 기능의 경우는 「안녕하세요 부」 「오늘도 노력합시다 부」가 변화하게 되어 있습니다.
@ohayo ["おはようござます。", "おはようござます!", "おはようござます(^o^)", "おはようござます(-_-)", "おはようござます(^_^)"]
@gobi ["今日も一日頑張りましょう!p(^_^)q", "さて仕事仕事..", "今日も一日頑張りましょう!♪( ´▽`)", "今日も一日頑張りましょう!( ̄▽ ̄)"]
def hogehoge()
Enum.random(@ohayo) <> "\n"
...
<> Enum.random(@gobi)
end
Reference
이 문제에 관하여(거친 wikipedia에서 오늘의 사건을 무작위로 얻는 slackbot), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/moru3/items/e27086beaf88e82a0455
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
「出来事(XXX年) の日」
<li><a href="/wiki/xxxxxxxxxx" title="YYYY年">YYYY年</a> - <a href="/wiki/xxxxxxxxxxxxxxxxxxxxxxxxx" title="hoge">hoge</a>: 出来事</li>
# 年と本文を切り分けてそれぞれ整形する(タグを除去)
splitLi = String.split(randomLi, " - ")
year = Enum.at(splitLi, 0)
year = String.replace(year, ~r/<.*?>/, "")
dekigoto = Enum.at(splitLi, 1)
dekigoto = String.replace(dekigoto, ~r/<.*?>/, "")
# 連結して結果を作成(長すぎるときは頭だけ返すようにしたい) TODO
result = dekigoto <> "(" <> year <> ")"
거칠게 했던 것보다는 움직이고 있네요··.
단지 조금 평화적인 내용이 좋다··.
덤
언제나 같은 투고를 반복하는 bot은 어미라든지 일부를 바꾸면 조금뿐입니다만 재미가 된다고 생각합니다.
예를 들면 이 기능의 경우는 「안녕하세요 부」 「오늘도 노력합시다 부」가 변화하게 되어 있습니다.
@ohayo ["おはようござます。", "おはようござます!", "おはようござます(^o^)", "おはようござます(-_-)", "おはようござます(^_^)"]
@gobi ["今日も一日頑張りましょう!p(^_^)q", "さて仕事仕事..", "今日も一日頑張りましょう!♪( ´▽`)", "今日も一日頑張りましょう!( ̄▽ ̄)"]
def hogehoge()
Enum.random(@ohayo) <> "\n"
...
<> Enum.random(@gobi)
end
Reference
이 문제에 관하여(거친 wikipedia에서 오늘의 사건을 무작위로 얻는 slackbot), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/moru3/items/e27086beaf88e82a0455
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
@ohayo ["おはようござます。", "おはようござます!", "おはようござます(^o^)", "おはようござます(-_-)", "おはようござます(^_^)"]
@gobi ["今日も一日頑張りましょう!p(^_^)q", "さて仕事仕事..", "今日も一日頑張りましょう!♪( ´▽`)", "今日も一日頑張りましょう!( ̄▽ ̄)"]
def hogehoge()
Enum.random(@ohayo) <> "\n"
...
<> Enum.random(@gobi)
end
Reference
이 문제에 관하여(거친 wikipedia에서 오늘의 사건을 무작위로 얻는 slackbot), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/moru3/items/e27086beaf88e82a0455텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)