[Elixir]Post app reviews, get with simple_app_reporter_ex, to Slack

I implemented simple posting app reviews to slack with Elixir-Slack(version 0.2.0) and Reporter(version 0.2.5).

  • Base implementation to handle post to slack with Elixir-Slack


defmodule MyBotEx.Client.Slack do
use Slack
# alias MyBotEx.Client.Slack.Action, as: SlackAction
alias MyBotEx.Client.Slack.Reporter, as: AppReporter
# get ids from config.exs
@droid_package Application.get_env :reporter, :droid_package
@droid_locale Application.get_env :reporter, :droid_locale
@app_id Application.get_env :reporter, :app_id
@app_locale Application.get_env :reporter, :app_locale
# Elixir-Slack
def handle_connect(slack, state), do: {:ok, state}
# Elixir-Slack
# Post message to slack
def handle_message(message = %{type: "message"}, slack, state) do
reply(:answer, message, slack)
{:ok, state}
end
# Elixir-Slack
def handle_message(_message, _slack, state), do: {:ok, state}
# send each reviews to slack
defp reply(:answer, message, slack) do
AppReporter.google_play_review(@droid_package, @droid_locale)
|> Enum.each(&send_message(&1, message.channel, slack))
AppReporter.app_store_revew(@app_id, @app_locale)
|> Enum.each(&send_message(&1, message.channel, slack))
end
defp reply(_, _, _), do: IO.inspect "nothing"
end

  • Use configurations to set target


use Mix.Config
config :reporter,
droid_package: "com.android.chrome",
droid_locale: "en",
get_count_google: 5,
app_id: "375380948",
app_locale: "en",
get_count_apple: 5


defmodule MyBotEx.Client.Slack.Reporter do
import Reporter
@get_count_google Application.get_env :reporter, :get_count_google
@get_count_apple Application.get_env :reporter, :get_count_apple
def google_play_review(app_package, locale) do
Reporter.google_play!(app_package, locale)
|> Reporter.GooglePlay.review_summaries
|> Enum.take(@get_count_google)
|> List.foldr([], fn (review, acc) ->
[":green_apple: " <> format(review)] ++ acc
end)
end
def app_store_revew(app_id, locale) do
Reporter.app_store_rss_json!(app_id, locale)
|> Reporter.AppStore.review_summaries
|> Enum.take(@get_count_apple)
|> List.foldr([], fn (review, acc) ->
[":apple: " <> format(review)] ++ acc
end)
end
defp format(review) do
~s"""
author: #{review["author"]}
rating: #{review["rating"]}
title: #{review["title"]}
body: #{review["body"]}
"""
end
end

Example

Screen Shot 2015-10-12 at 13.35.58

Github: https://github.com/KazuCocoa/my_bot_ex

Leave a Comment

This site uses Akismet to reduce spam. Learn how your comment data is processed.