カッパでも分かるiOSアプリゲーム開発

カッパがひたすらゲーム制作に関することを書くブログです。Railsに関するTipsもたまにまとめてます。

Amazon API + heroku + はてなブログ(無料) でアイドル写真集の自動投稿ブログを作る方法

スポンサードリンク

f:id:InvokeTwoA:20151201180114j:plain
f:id:InvokeTwoA:20151023183618p:plain「微エロサイトを作ったぞー!」
f:id:InvokeTwoA:20151215172640p:plain「……(かっぱクエストはどうしたんだろう?)」
【目次】

作ったサイト

kawa-e.hateblo.jp

  • 写真集の表紙など、中高生が喜びそうな画像をひたすら並べるブログ
  • amazonの商品紹介などを本文に採用
  • 管理画面でぱっと見で画像を見て承認or却下を選択できる
  • cronでデータを取ってくるので、朝起きたらそこそこの記事候補ができている

(あまりAPI叩き過ぎると制限されるので、1時間に1回くらいしかAPIでアクセスしない。それでも1日24記事なので充分すぎる量)

マネタイズ

  • nend ad による広告クリック収入(スマホのみ。nend は以外にもアダルト許容だった)
  • amazonアフィリエイト
  • アダルトではないので google adsense も大丈夫だけど、なんかビビって申請せず

f:id:InvokeTwoA:20151023183618p:plain「収入はスズメの涙……」
f:id:InvokeTwoA:20151215172640p:plain「自動投稿ではそんなものですよね」

反応は?

f:id:InvokeTwoA:20151217185719j:plain
f:id:InvokeTwoA:20151023183618p:plain「デイリーのアクセスが200~400程度。自動投稿でこれだけ来ると思えば、なかなか凄い事だと思う」
f:id:InvokeTwoA:20151215172640p:plain「はてなブログのSEO力ですかね」
f:id:InvokeTwoA:20151023183618p:plain「ちなみにアニメ情報の自動投稿ブログも作ってみたけど、そっちはデイリー3とか4の悲しすぎるPVだった」
f:id:InvokeTwoA:20151215172640p:plain「グラビアは強い、という事ですな」

  • グラビアは男性ユーザーなら中高生から大人まで全て対象に入るの非常に幅広い
  • また、グラビアは昔の商品でも(多少は時代による美的センスの違いもあるが)劣化しないので、昔の商品情報を表示しても価値がそこそこある
  • ブログへの自動投稿は初体験だったので楽しかった

今後の課題

f:id:InvokeTwoA:20151208221411j:plain

  • もっと文章にオリジナリティを出せるようにしたい(今はamazonのコピーサイト判定受けても仕方ないレベル)
  • 他のAPIからも関連情報を引っ張れるようにしたい
  • 他分野でも有益なサイトが作れないか試したい
  • たまに「佐野ひなこ」で検索したのに全然ちがう渋い本がヒットしたりする。検索精度の向上
  • せっかくDBにいろいろな情報を貯めてるのだし、ブログ以外にも展開できるようにしたい

f:id:InvokeTwoA:20151023183618p:plain「以下、技術の話になります」
f:id:InvokeTwoA:20151215172640p:plain「興味ない人はコメント書いてブクマして退散してください」

Rails + AmazonAPI でアイドル写真集を取得する方法

f:id:InvokeTwoA:20151227052607j:plain
使用gem

gem 'amazon-ecs'

  • ソースコード
      #Amazon::Ecs.debug = true
      res = Amazon::Ecs.item_search(
        "キーワード(グラビアアイドルの名前など)",
        search_index:  'Book',
        response_group: 'Large',
        condition: 'All',
        country:        'jp',
        itemPage: 1,
      )
  • Amazon::Ecs.debug = true のコメントを外すと、どんなurlにアクセスしたかなどの詳細ログが表示される。APIがエラー出力するときなどは試すと良い

ヒット件数の確認

  • 下記でアイテムのヒット件数を取得できる
res.items.count
  • 1ページに10件までしかデータを取れない。itemPage の値を1から増やしていき、items.count がなくなるまではデータがあると思って良い

商品情報の取得

res.items.each do |item|
  # 処理記述
end

もしくは

item = res.first_item

で item に商品オブジェクトが返ってくる

ASINコード(amazonの商品コード)を取得 item.get('ASIN')
タイトルを取得 item.get('ItemAttributes/Title')
画像URLを取得 item.get("LargeImage/URL")
関連商品を取得 item.get_element('SimilarProducts').elem.children これを each すれば各商品アイテムが取得できる
アダルト商品化の判定 item.get('ItemAttributes/IsAdultProduct') == "1" で true だったらアダルト商品

はてなブログへの投稿・編集・削除

f:id:InvokeTwoA:20151201101323j:plain

  • atomutil の gem を使えば簡単にできる

gem 'atomutil'

  • はてなブログの設定ページ->詳細設定 に api のエントリポイントとAPIキーが記載されている
ルートエンドポイント https://blog.hatena.ne.jp/hoge_taro/hogehoge.hateblo.jp/atom
APIキー hoge1234

登録

  def post_hatena_blog(title, body)
      url = 'https://blog.hatena.ne.jp/hoge_taro/hogehoge.hateblo.jp/atom/entry'
      user = 'home_taro'
      api_key = 'hoge1234'
      auth = Atompub::Auth::Wsse.new(
        username: user,
        password: api_key
      )
      client = Atompub::Client.new(auth: auth)
      entry = Atom::Entry.new(
        title: title.encode('BINARY', 'BINARY'),
        content: body.encode('BINARY', 'BINARY')
       )
      res = client.create_entry(url, entry);
      return res.split("/").last
  end
  • 戻り値としてブログIDが返ってくるので保存する(後のはてなブログの編集・削除に必要)

編集

  def update_hatena_blog(title, body, blog_id)
      url = 'https://blog.hatena.ne.jp/hoge_taro/hogehoge.hateblo.jp/atom/entry/#{blog_id}'
      user = 'home_taro'
      api_key = 'hoge1234'
      auth = Atompub::Auth::Wsse.new(
        username: user,
        password: api_key
      )
      client = Atompub::Client.new(auth: auth)
      entry = Atom::Entry.new(
        title: title.encode('BINARY', 'BINARY'),
        content: body.encode('BINARY', 'BINARY')
       )
      client.update_entry(url, entry);
  end

削除

  def delete_hatena_blog(blog_id)
      url = 'https://blog.hatena.ne.jp/hoge_taro/hogehoge.hateblo.jp/atom/entry/#{blog_id}'
      user = 'home_taro'
      api_key = 'hoge1234'
      auth = Atompub::Auth::Wsse.new(
        username: user,
        password: api_key
      )
      client = Atompub::Client.new(auth: auth)
      client.delete_entry(url);
  end

はてなブログのカテゴリを設定する

下記のようなタイトル指定にすればできる

[カテゴリ]ブログタイトル

※自分は「はてな記法」の設定でできた。他の設定ではうまく行くかは未検証

注意点

  • amazon API やはてなブログのAPIに過度なアクセスをしすぎるとBANされるのでダメ
  • amazon API で取得できた画像URLをDBに保存してはいけない(とどこかに書いてあったと思う)
  • いずれにしろ外部サーバーに必要以上にアクセスしてはいけないので、そこは工夫するようにする
  • たまに通信失敗したりするので例外処理はきちんとやる

締めの言葉

f:id:InvokeTwoA:20151023183618p:plain「アプリだけじゃなくサイト作りも楽しい、と思ったね」
f:id:InvokeTwoA:20151215172640p:plain「新サイト作るとSEOが大変だけど、はてなブログ使えばその辺りは楽できるので良いですね」
f:id:InvokeTwoA:20151023183618p:plain「今年はアプリもサイトも沢山作っていくぞー」
f:id:InvokeTwoA:20151215172640p:plain「おー!」