バイラルメディアはタイトルが9割!? タイトルとソーシャルの相関を見てみた【準備編】
バイラルメディアが最近流行ってきていますね。
2014年に新たな旋風を巻き起こす!?「バイラルメディア」が急成長する理由とは(柴田泰成) - 個人 - Yahoo!ニュース
いたるところでバイラルメディアが取り上げられています。
バイラルメディアとは
バイラルメディアについてですが、
1. コンテンツはタイトル + 動画の組み合わせ(が多い)
2. ソーシャルでバズることが最大の目的
3. 検索エンジンからの流入は目指さない
このような感じ。
バイラルメディア一覧
バイラルメディアの中でも有名なものを紹介していきます。
dropout
dropout – 刺さる動画メディア
社会問題や風刺などのコンテンツがメインのバイラルメディア
Whats
Whats(ワッツ) | 動画サイト
おもしろ動画や驚きの動画などがメインのバイラルメディア
animal buzz
animal buzz
動物動画などがメインのバイラルメディア
CuRAZY
CuRAZY | 笑うメディア
おもしろコンテンツがメイン。ただし動画に限らないところが他のバイラルメディアとは違うところ。
バイラルメディアが広まる流れ
1. 誰かが最初のシェアをする
2. 他の人がシェアされたコンテンツを見る
3. シェアされたコンテンツを見た人がまたシェアする
4. 2に戻る
2, 3の無限ループによって成り立つメディアと言えます。
ポイントはいかにループを止めないか。
最初にシェアした人のfacebook + twitterで見る人が Imp
それらを見てコンテンツを見る人の割合を CTR
コンテンツを見て再度シェアする人の割合を CVR
と考えるとわかりやすいかと思います。
Impはシェアする人に左右されるため、コンテンツでは制御しにくい部分があります。
となるとCTRをどれだけあげられるか、CVRをどれだけあげられるかが勝負になってきます。
結論からいうと
CTRを上げるにはタイトルの最適化
CVRを上げるにはコンテンツの最適化
コンテンツの最適化についてはどんなコンテンツを選ぶかがポイントです。
そして、良いコンテンツを選んだならば見られなければ意味がありません。
見られるためにはCTRを上げる必要がある。つまりどれだけタイトルを最適化できるか。
これこそが、本記事のタイトルバイラルメディアはタイトルが9割というものにつながります。
というわけでバイラルメディアのタイトルを分析してみます。
バイラルメディアのタイトル分析
まず外部から取得できる情報を考えます。
1. タイトル
2. facebookのいいね数
3. twitterでシェアされたカウント数
4. 動画の各情報
残念ながらimpとコンテンツのimp(CTR)は取ることができません。
なのでタイトルと相関のあるCTRが取れないのは残念ですが、ImpとCVRを固定として考えます。
バイラルメディアは
dropout – 刺さる動画メディア
を選択し、各情報を見ていきます。
それでは各情報をどうやって取っていくかを説明します。準備編ということで本記事ではこれがメインの内容です。
ちなみに参考にした記事はこれらの記事
Webスクレイピング関連
RubyのNokogiriを使ってサイトをスクレイピングする - Think Big Act Local
Ruby - Nokogiriでスクレイピング - Qiita [キータ]
いいね・twitter数取得関連
twitter - 特定のURLの、ツイート数・いいね数を取得するAPI - Qiita [キータ]
RubyでJSON形式の結果が返ってくるURLをParseする - Qiita [キータ]
youtube時間取得
デベロッパー ガイド: Data API プロトコル - 単独の動画情報の取得 - YouTube — Google Developers
XML処理 REXMLの使い方 - プログラムメモ
最初にどんなコードを書いたかを
require "open-uri" require "rubygems" require "nokogiri" require "net/http" require "json" File.open("dropout.csv", "w"){|f| f.write "title, like, tweet, video_sec\n" for i in 1..10 do url = "http://dout.jp/page/#{i}" charset = nil html = open(url) do |f| charset = f.charset f.read end doc = Nokogiri::HTML.parse(html, nil, charset) doc.xpath('//div[@class="box"]').each do |node| title = node.children.css("h2").text # fb uri_fb = URI.parse("http://graph.facebook.com/#{node.children.css("a").first[:href]}") json_fb = Net::HTTP.get(uri_fb) result_fb = JSON.parse(json_fb) like = result_fb["shares"] # twitter uri_twitter = URI.parse("http://urls.api.twitter.com/1/urls/count.json?url=#{node.children.css("a").first[:href]}"); json_twitter = Net::HTTP.get(uri_twitter) result_twitter = JSON.parse(json_twitter) tweet = result_twitter["count"] # youtube youtube_src = node.children.css("iframe").first[:src] if youtube_src.match(/youtube/) uri_youtube = URI.parse("http://gdata.youtube.com/feeds/api/videos/#{youtube_src.split("embed/")[1].split("?")[0]}") xml_youtube = Net::HTTP.get(uri_youtube) doc_youtube = Nokogiri::XML.parse(xml_youtube, nil, charset) video_sec = doc_youtube.xpath("//yt:duration").first[:seconds] end p "#{title},#{like},#{tweet},#{video_sec}" f.write "#{title},#{like},#{tweet},#{video_sec}\n" end end }
最終的なアウトプットは
title, like, tweet, video_sec
~, ~, ~, ~
~, ~, ~, ~
といったCSVになります。
ソースコードの流れを説明すると、
1. nokogiriというwebスクレイピングgemでタイトルを取得し変数に
doc.xpath('//div[@class="box"]').each do |node| title = node.children.css("h2").text ~ end
2. 同様に各記事詳細ページのURLを取得
2-1. いいね数, tweet数を取得する詳細ページのURLをパラメータとするAPIを叩く
2-2. API結果のJSONをパースし、いいね数とtweet数を取り出し変数に
doc.xpath('//div[@class="box"]').each do |node| # fb uri_fb = URI.parse("http://graph.facebook.com/#{node.children.css("a").first[:href]}") json_fb = Net::HTTP.get(uri_fb) result_fb = JSON.parse(json_fb) like = result_fb["shares"] # twitter uri_twitter = URI.parse("http://urls.api.twitter.com/1/urls/count.json?url=#{node.children.css("a").first[:href]}"); json_twitter = Net::HTTP.get(uri_twitter) result_twitter = JSON.parse(json_twitter) tweet = result_twitter["count"] ~ end
3. 同様に各記事youtubeのURLを取得
3-1. そのURLからyoutube動画のIDを取得
3-2. 動画の情報を取得するIDをパラメータとするAPIを叩く
3-3. API結果のXMLをパースし、動画の秒数を取得
doc.xpath('//div[@class="box"]').each do |node| ~ # youtube youtube_src = node.children.css("iframe").first[:src] if youtube_src.match(/youtube/) uri_youtube = URI.parse("http://gdata.youtube.com/feeds/api/videos/#{youtube_src.split("embed/")[1].split("?")[0]}") xml_youtube = Net::HTTP.get(uri_youtube) doc_youtube = Nokogiri::XML.parse(xml_youtube, nil, charset) video_sec = doc_youtube.xpath("//yt:duration").first[:seconds] end p "#{title},#{like},#{tweet},#{video_sec}" f.write "#{title},#{like},#{tweet},#{video_sec}\n" ~ end
このような感じで上記のようなCSVが出力されます。
各記事のタイトル、いいね数、tweet数、動画の秒数がとれたので分析フェーズに行こうかと思います。
といったところで今回の記事はここまでです。
次回の分析編をお楽しみに!
(ちなみにどなたかこの結果を利用して分析したいという方がいればデータをお渡しします)