[ツイート数取得]ジェイソンがないなら、ジェイスーンを使えばいいじゃない?

PHP
この記事は約21分で読めます。

Twitterのツイート数取得APIが終了しました。あちこちのブログ記事から「ツイート数」が消えていく…そんな世界の始まりです。

WordPressプラグインの「SNS Count Cache」をカスタマイズしてcount.jsoonというサービスを使ってツイート数を取得させてみます。

ツイート数取得終了のお知らせ

2015年9月23日頃、公式ツイートボタンを刷新して「ツイート数」が表示されないデザインが発表されたようです。

それに続いて、ツイッター開発ブログ「The Twitter Japan Developer Blog」で、「公式ツイートボタンにツイート数を表示しなく」なることと、「非公式のエンドポイントが廃止される」ことが書かれていました。

この「非公式のエンドポイント」というのが、「http://urls.api.twitter.com/1/urls/count.json」のこと。

ツイート数(count)を、JSON(JavaScript Object Notation)という形式で返してくれる「count.json」(カウント・ジェイソン)と呼ばれているAPIです。

まだTwitterのカウントAPIで取得できているみたい?Σ(゚ロ゚)o゙→終了しました」で書いたとおり、今まではパラメータとしてURLを放り込めば「{“count”:368898,”url”:”http:\/\/www.google.co.jp\/”}」という感じでカウントが戻ってきたので、「count」→「368898」という感じで数値を取り込めました。

get-tweet

11月22日の明け方くらいからこんな感じで、エラーを返すようになっています。

sorry-count

とりあえず「サーバーが見つかりません」とか「404 Not Found」とか「403 Forbbiden」とかの「アクセスエラー」な感じではなくて、丁寧にJSON形式でエラーを返してくれています。(取得できないことには変わりは無いのですが。)

「吹き出し」とか「リスト」とか

ツイート数が取得できなくなるということで、取得できなくなる前から色んなサイトさんやWordPressテーマなどではツイート数の表示を「吹き出し」()に変更したり、「ツイッターアイコン」()に変更したりして、「数字」の代わりになるものを表示して対応います。

当サイトはというと、「まあ、アクセスできなくなってから対処しよう…Σ(゚ロ゚)o゙」という感じで傍観。

SNSカウントをキャッシュしておくプラグイン「SNS Count Cache」を使わせていただいていたので、「APIが終わってもしばらくはキャッシュからカウントが表示されてるんじゃないかなぁΣ(゚ロ゚)o゙」なんて余裕な感じでいました。

結果としては取得エラーになってカウントがどんどん0になっていき、すべての記事のツイート数が「0」に。

「とりあえず、今流行りのリスト表示にしとくかなぁ(^-^;」ということで数字の代わりに「検索」と表示させて、クリックするとツイート検索するようにしておきました。

ちなみに当サイトで公開しているリンクをブログカード形式で表示させる「Pz-LinkCard」もツイート数は取得できないので更新はされません。

ただし、記録しているツイート数はそのまま表示させることができます。(更新されないのであまり意味はありませんが、余韻に浸る感じで…。)

カウントジェイソン→カウントジェイスーン

ツイート数取得API「count.json」(カウント・ジェイソン)の代替になるAPIとして、株式会社ディジティ・ミニミさんがリリースした「count.jsoon」(カウント・ジェイスーン)というAPIがあるとのこと。

取り上げている記事は11月6日なので、停止する発表を受けてリリースした感じでしょうか。

こちらがcount.jsoonのサイト。

開発元の株式会社ディジティ・ミニミさんのサイト。

「OTOTOY」(オトトイ)という音楽アプリをリリースしたりしているようです。

「代表者プロフィール」を見ると「モリタポ」を開発した方だったり、タワーレコードの取締役さんだったり、何やらすごそうです。

それにしても、「count.json」に「o」を一個くっつけた「count.jsoon」というネーミング、なんか面白いです。

いざ、登録。

最初にcount.jsoonのサイトから、取得して欲しい自分のサイトのアドレスと、メールアドレスを入力して登録を行います。

count-jsoon-regist

サイトがリニューアルしてスッキリした感じになっていました。入力項目とかには変わりが無いと思われます。
new-soon

「登録を受け付けました」となりました。

count-jsoon-order

「処理が完了次第メールでお知らせします」とのこと。

22日に登録したものの、メールが来ないので念のため25日に再度登録したところ、26日に登録完了メールが来ました。

ユーザーページを開けてみたところ、8~16時間くらいかかったとのこと。

count-jsoon-userpage

「クロール」のところに「SLOW」と表示されています。Twitter連携を登録すると、収集が早くなるようです。

一応許可する権限は「タイムラインのツイートを見る。」と「フォローしている人を見る。」の2つ。

permit

不意につぶやいたりとかは無いようなので許可しても問題なさそうですが、とりあえず保留。

(追記)

許可権限も問題なさそうなので、けっきょく連携してしまいました。

収集速度が「HIGH」になりました。

twitter-on

取得APIそのものは登録しなくても使えるけど

さて、直接APIを叩いて「www.google.co.jp」のカウントを取得してみるとこんな感じ。2,982ツイートのようです。

{“url”:”http:\/\/www.google.co.jp”,”count”:2982}

jsoon-google

ちなみに21日現在、Twitterのcount.jsonではこんな結果でした。

{“count”:368898,”url”:”http:\/\/www.google.co.jp\/”}

get-tweet

“url”と”count”の順番がちょっと違いますが、URLが先の方がスッキリしてる感じはします。

ツイート数も、今までのを復元するという感じでは無くて、取り直している感じでしょうか。

 

さて、「技術的なこと」というページを見ると、TwitterのAPIを使ってツイートを収集、カウントをしていると書いています。

ウェブサイトを登録することで、その登録したウェブサイトのカウントを取得してくれるようです。

つまり、登録していないサイトはカウントされないということになります。

 

実はAPIの記述をすれば「count.jsoon」そのものは使えるので、登録とかしなくても使えます。

ただし、登録したサイトしかツイート数を収集しないので、ツイート数を取得しても0が返ってきます。

外部サイトの取得に使っても、そのサイトがcount.jsoonに登録していないと0が返ってくるので、何でもかんでも差し替えれば良いわけでは無さそうで、自分のサイトの記事のツイート数の取得に使う分には最適な感じです。

count.jsonをcount.jsoonに差し替える、「どこの?」

ソーシャルカウントの取得は時間がかかるので、バックグラウンドでソーシャルカウントを取得しておいて保存(キャッシュ)しておき、表示するときはキャッシュから高速に表示できるWordPressプラグイン「SNS Count Cache」を使用しています。

WordPressテーマのSNSボタンのところの記述を修正する方法もありますが、せっかくソーシャルカウントの高速化を行っているプラグイン「SNS Count Cache」を使っているので、それのツイート数取得のAPI部分を差し替えるのが良さそうです。

プラグインの修正を誤った場合、WordPress管理画面すら表示されなくなるような状況もあります。可能であればテストサイトで試したり、元のファイルは別名で保存しておいて戻せる状態にしておくことをお勧めします。また、プラグインをバージョンアップした際には全てのファイルが上書きされますので、一時的な対処ということに留意しましょう。

本当はしばらくカウントのキャッシュが残って、ツイート数が残っている目論見だったのですが、次々を「0」になっていって、とりあえず「リスト」表示に変更したところです。

そんなこんなで、「【WordPress】ツイート数が取得できなくなったSNS Count Cacheを「count.jsoon」で復活させる方法」というAPIを差し替える記事がありました。

通常にレンタルサーバーのファイルマネージャーや、FTPソフト(WinSCPなど)から編集できる方は上のリンク先の記事を見ていただくと良いと思うので、プラグイン一覧の画面からアプローチする感じで書いてみます。

プラグイン一覧画面から修正してみる

修正するファイルは「wp-content/plugins/sns-count-cache/includes/class-share-crawler.php」とのこと。

「シェア数」の「クローラ」(巡回プログラム)という意味ですね。

レンタルサーバーの「ファイルマネージャー」や、FTP(WinSCPなど)を使った方がラクだとは思いますが、プラグイン一覧の画面から編集してみます。

プラグイン一覧から「SNS Count Cache」を探して「編集」を押します。

edit-plugin-menu

「sns-count-cache/sns-count-cache.php の編集(使用中)」という画面になりますので、右側の「プラグインファイル」の中から「sns-count-cache/includes/class-share-crawler.php」を探します。

ファイル数が多いので、目で探すよりも[Ctrl]+[F]を押して、「share-crawler」とかで検索するとすぐに見つかると思います。

found-class-share-crawler

Twitterのツイート数取得APIのURLである「http://urls.api.twitter.com/1/urls/count.json?url=」が書いてある行を探します。

バージョン 0.8.0の場合、155行目ですが、プラグイン編集画面では行数が分からないので、「urls.api」や「twitter」とかのキーワードで検索するとラクだと思います。

api-url

このAPIの部分をcount.jsoonのURLである「http://jsoon.digitiminimi.com/twitter/count.json?url=」に変更します。

 if ( isset( $target_sns[SNS_Count_Cache::REF_SHARE_TWITTER] ) && $target_sns[SNS_Count_Cache::REF_SHARE_TWITTER] ) {
$query_urls[SNS_Count_Cache::REF_SHARE_TWITTER] = 'http://urls.api.twitter.com/1/urls/count.json?url=' . $url;
}

 if ( isset( $target_sns[SNS_Count_Cache::REF_SHARE_TWITTER] ) && $target_sns[SNS_Count_Cache::REF_SHARE_TWITTER] ) {
$query_urls[SNS_Count_Cache::REF_SHARE_TWITTER] = 'http://jsoon.digitiminimi.com/twitter/count.json?url=' . $url;
}

URLのドメインより右側は大文字小文字も区別してしまうので、なるべくコピー/貼り付けすると良いかも知れません。

Twitterのツイート数API http://urls.api.twitter.com/1/urls/count.json?url=
count.jsoon http://jsoon.digitiminimi.com/twitter/count.json?url=

URLの最後にある「?url=」という部分はパラメータで、この後ろに取得したい「記事のURL」を記述します。(「:」→「%3A」、「/」→「%2F」などのURIエンコードするのを推奨。)

プログラムだと、ここで記事のURLを指定しています。

php-url

なので、「http://jsoon.digitiminimi.com/twitter/count.json?url=http%3A%2F%2Fwww.google.co.jp」とかすると、「www.google.co.jp」のカウントが取得できます。

もしもエラーが出たら?

エラーが出た場合には修正ミスが考えられます。

再度プラグインの画面から編集を押して「sns-count-cache/includes/class-share-crawler.php」を編集します。

今度は「urls.api.twitter.com」という文字列は無いので、「count.jsoon」とか「digitiminimi」とかのキーワードで検索します。

漢字モードでは無い状態(半角)のスペース(空白)とするところを、全角のスペースにしてしまったり、小文字で書くところを大文字で書いてしまったり、目で見て分かりづらい場合には、一行まるまる手入力しなおしてみると良い場合があります。

半角アポストロフィ は1個の上付きの点です。かなり見づらいので、誤って消してしまったり、ダブルクォート と間違えて加えてしまったりしないように注意してください。

通常はプラグインのソースを直すのはサポート外なので、不安な場合は手を出さないのが良いと思います(^-^;

(なお、当サイトのプラグイン「Pz-HatenaBlogCard」と「Pz-LinkCard」はカスタマイズOK。ある程度はサポートします。)

あれれ?カウント0だよ?

「count.jsoon」は、登録してから少しずつ過去のツイートを検索してカウントを取り戻していきます。

特にツイート連携していない場合には「SLOW」(遅い)状態で取得されるので、反映されるまで気長に待ちましょう。

そして、カウント数表示

SNS Count Cacheから数値を取得して、ツイート数として表示しているのですが、この前「検索」という表示にしてツイート検索に飛ぶようにしたばかりです。

検索機能も活かしたいし、ツイート数が表示できるなら表示したい。でも、ツイートされててもまだ「0」のままの記事も多い。

ということで、「0」のときは「検索」と表示、「1」以上の場合はツイート数を表示させて、いずれの場合でも「ツイート検索」へのリンクを設定することにしてみました。

テーマ等によって変更箇所などが全然違うので、とりあえずカウントの部分だけ書いてみます。

<?php if(function_exists('scc_get_share_twitter')) echo '<a href="https://twitter.com/search?f=tweets&q='.rawurlencode(str_replace('http://','',get_the_permalink())).'&src=typd" target="_blank">'.((scc_get_share_twitter() > 0) ? scc_get_share_twitter() : '検索' ).'</a>'; ?>

if(function_exists(‘scc_get_share_twitter’))」で「SNS Count Cache」でのツイート数取得が有効かどうかを確認。有効だったら「echo」によって「‘<a href=”https://twitter.com/search?f=tweets&q=’.rawurlencode(str_replace(‘http://’,”,get_the_permalink())).’&src=typd” target=”_blank”>’.((scc_get_share_twitter() > 0) ? scc_get_share_twitter() : ‘検索’ ).'</a>’」の部分がHTMLソースに出力されます。

Aタグでリンクを設定しますが、ここには「https://twitter.com/search?f=tweets&q=’.rawurlencode(str_replace(‘http://’,”,get_the_permalink())).’&src=typd」という感じでツイート検索のURLが記述されています。

その後の「((scc_get_share_twitter() > 0) ? scc_get_share_twitter() : ‘検索’ )」という部分で、「ツイート数が0より上」なら「ツイート数」、そうでないなら「検索」という文字を表示します。

これなら、0件でも見栄えが悪くないし、ツイート数が取得できていれば表示できるし。

実際に当サイトのSTINGER5で使っているsns.phpはこんな感じです。

&lt;div class="sns"&gt;
&lt;ul class="snsb clearfix"&gt;
&lt;li&gt;&lt;span class="sns-count"&gt;&lt;?php if(function_exists('scc_get_share_twitter')) echo '&lt;a href="https://twitter.com/search?f=tweets&amp;q='.rawurlencode(str_replace('http://','',get_the_permalink())).'&amp;src=typd" target="_blank"&gt;'.((scc_get_share_twitter() &gt; 0) ? scc_get_share_twitter() : '検索' ).'&lt;/a&gt;'; ?&gt;&lt;/span&gt;&lt;a href="https://twitter.com/intent/tweet?url=&lt;?php the_permalink(); ?&gt;&amp;text=&lt;?php echo get_the_title(); ?&gt;" target="_blank" onclick="javascript:window.open(this.href, '', 'width=700,height=500,resizable=yes,menubar=no,toolbar=no,location=no,status=no,scrollbars=yes');return false;"&gt;&lt;span class="sns-icon twitter"&gt;twitter&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;span class="sns-count"&gt;&lt;?php if(function_exists('scc_get_share_facebook')) echo scc_get_share_facebook(); ?&gt;&lt;/span&gt;&lt;a href="https://www.facebook.com/sharer/sharer.php?u=&lt;?php the_permalink(); ?&gt;" target="_blank" onclick="javascript:window.open(this.href, '', 'width=600,height=300,resizable=yes,menubar=no,toolbar=no,location=no,status=no,scrollbars=yes');return false;"&gt;&lt;span class="sns-icon facebook"&gt;facebook&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;span class="sns-count"&gt;&lt;?php if(function_exists('scc_get_share_gplus')) echo scc_get_share_gplus(); ?&gt;&lt;/span&gt;&lt;a href="https://plus.google.com/share?url=&lt;?php the_permalink(); ?&gt;" target="_blank" onclick="javascript:window.open(this.href, '', 'width=700,height=600,resizable=yes,menubar=no,toolbar=no,location=no,status=no,scrollbars=yes');return false;"&gt;&lt;span class="sns-icon gplus"&gt;google+&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;span class="sns-count"&gt;&lt;?php if(function_exists('scc_get_share_hatebu')) echo scc_get_share_hatebu(); ?&gt;&lt;/span&gt;&lt;a href="http://b.hatena.ne.jp/add?mode=confirm&amp;url=&lt;?php the_permalink(); ?&gt;&amp;title=&lt;?php echo get_the_title(); ?&gt;" target="_blank" onclick="javascript:window.open(this.href, '', 'width=600,height=400,resizable=yes,menubar=no,toolbar=no,location=no,status=no,scrollbars=yes');return false;"&gt;&lt;span class="sns-icon hatebu"&gt;はてなブックマーク&lt;/span&gt;&lt;/a&gt;
&lt;li&gt;&lt;span class="sns-count"&gt;&lt;?php if(function_exists('scc_get_share_pocket')) echo scc_get_share_pocket(); ?&gt;&lt;/span&gt;&lt;a href="http://getpocket.com/edit?url=&lt;?php the_permalink() ?&gt;&amp;title=&lt;?php echo $title_encode; ?&gt;" target="_blank" onclick="javascript:window.open(this.href, '', 'width=600,height=300,resizable=yes,menubar=no,toolbar=no,location=no,status=no,scrollbars=yes');return false;"&gt;&lt;span class="sns-icon pocket"&gt;Pocket&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;span class="sns-count"&gt;&lt;?php if(function_exists('scc_get_follow_feedly')) echo scc_get_follow_feedly(); ?&gt;&lt;/span&gt;&lt;a href="http://cloud.feedly.com/#subscription/feed/https://popozure.info/feed" target="_blank" onclick="javascript:window.open(this.href, '', 'width=800,height=800,resizable=yes,menubar=no,toolbar=no,location=no,status=no,scrollbars=yes');return false;"&gt;&lt;span class="sns-icon feedly"&gt;feedly&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;link rel="stylesheet" href="&lt;?php echo get_stylesheet_directory_uri(); ?&gt;/sns.css" /&gt;

前回の記事でも触れましたが、sns.cssとかsns.pngとか他に必要なファイルがあるのでそのまま貼り付けてもきれいには表示されないと思いますので、参考までに。

とりあえず、これで様子を見ようと思います。

では、この辺で。(^-^)o

コメント

  1. おかえりなさいです。
    この度はTwitterのシェア数復活までの方法を教えて頂き大変助かりました。
    ツイート数の代わりに検索とするのも素晴らしいアイデアだと思います。
    そちらもいつかは挑戦してみたいです。

    • おかえりなさいさん、おかえりなさい。

      有償のWordPressテーマ「アルバトロス」はソーシャルカウントの取得に「SNS Count Cache」を使っているので、当記事と同じようにプラグインを修正するだけでテーマのカウントが表示されましたね。(^-^)o

      当サイトでは「0」って表示されるのは寂しいので、「0じゃないかもよ?Σ(゚ロ゚)o゙」って感じにしてみました。

      FontAwesomeというウェブフォントを使っているならば吹き出しアイコンとかツイッターアイコンにすることもできます。

      色々挑戦することがあると楽しいですよね!お互いがんばりましょう♪(^-^)o

タイトルとURLをコピーしました