よしたく blog

ほぼ週刊で記事を書いています

Google Apps Scriptsからはてなブックマーク数を取得しよう

f:id:yoshitaku_jp:20190112141434p:plain

tl;dr

内容

はてなブックマーク数を取得するスクリプト

はてなブックマーク数を取得するスクリプトです。 あなたのはてなブログのURLの部分をご自身のものに変更して、処理を流せばreturnで読者数が返ってくるようになっています。

var url, response
url = 'http://api.b.st-hatena.com/entry.total_count?url=https://yoshitaku-jp.hatenablog.com'; 
response = UrlFetchApp.fetch(url);
const total_bookmarks = JSON.parse(response)["total_bookmarks"];
Logger.log(total_bookmarks)
return total_bookmarks

http://api.b.st-hatena.com/entry.total_count?url=あなたのブログのURLの返り値

返り値は下の内容です。ここからtotal_bookmarksを指定して、はてなブックマーク数を抜き出します。 取得したあとは、Spreadsheetに書き出したりして記録していくのがいいと思います。

リクエスhttp://api.b.st-hatena.com/entry.total_count?url=https://yoshitaku-jp.hatenablog.com

レスポンス

{"url":"https://yoshitaku-jp.hatenablog.com","total_bookmarks":82}

個別の記事のはてなブックマーク数を取得する方法

entry.total_countentry.countに変更して、url以降を個別の記事のURLにすると取得することができます

リクエスhttp://api.b.st-hatena.com/entry.count?url=https://yoshitaku-jp.hatenablog.com/entry/2018/12/12/000500

レスポンス

http://api.b.st-hatena.com/entry.count?url=https://yoshitaku-jp.hatenablog.com/entry/2018/12/12/000500

まとめ

yoshitaku-jp.hatenablog.com

#ゆうかねラジオ にゲスト出演したものが公開されました

以前、収録してきた記事を書きましたー。

yoshitaku-jp.hatenablog.com

そして、先日公開していただいたので自分のブログでも宣伝させていただきます!

anchor.fm

ゆうさんTwitterで宣伝ありがとうございます!

後半は趣味トーク全開ですが、ご意見ご感想 #ゆうかねラジオ などにてお待ちしています。

Google Apps Scriptsからはてなブログの読者数を取得しよう

f:id:yoshitaku_jp:20190107120645p:plain

tl;dr

  • Google Apps Scriptsからはてなブログの読者数を取得する
  • 切りの良い年のはじめから指標となるものを取得しよう!

内容

はてなブログの読者数を取得するスクリプト

はてなブログの読者数を取得するスクリプトです。 あなたのはてなブログのURLの部分をご自身のものに変更して、処理を流せばreturnで読者数が返ってくるようになっています。

var url, response
url = 'https://blog.hatena.ne.jp/api/init?blog=あなたのはてなブログのURL'; 
var headers={"X-Requested-With": "XMLHttpRequest"}
var options = {
  "method" : "GET",
  "headers" : headers,
  "followRedirects" : false
}
response = UrlFetchApp.fetch(url, options );
var subscribes = JSON.parse(response)["subscribes"];
Logger.log(subscribes)
return subscribes

https://blog.hatena.ne.jp/api/init?blog=あなたのはてなブログのURLの返り値

返り値は下の内容です。ここからsubscribesを指定して、読者数を抜き出します。 取得したあとは、Spreadsheetに書き出したりして記録していくのがいいと思います。

{
 subscribes=60, 
 private={}, 
 subscribe_url=https://blog.hatena.ne.jp/yoshitaku_jp/yoshitaku-jp.hatenablog.com/subscribe, 
 blog_url=https://yoshitaku-jp.hatenablog.com/, 
 subscribe=false, 
 editable=false, 
 should_show_invitation_pc_link=true, 
 blog=https://yoshitaku-jp.hatenablog.com, 
 cookie_received=false, 
 quote={
  should_navigate_to_login=true, 
  star_addable=true, 
  stockable=true, 
  supported=true
 }, 
 can_open_editor=false, 
 is_public=true, 
 blog_name=よしたく blog, 
 commentable=false
}

まとめ

  • Google Apps Scriptsからはてなブログの読者数を取得する
  • 年のはじめに指標となるものを取得しよう!
  • 取得シリーズは続けていきます

エンジニアの登壇を応援する忘年LT大会で挑戦してみたこと

「エンジニアの登壇を応援する忘年LT大会」でLTをしてきました。

公式レポートはこちらです

techplay.jp

11月に初めてをLTをして、「こういうのは継続しないと!」と思って即応募してよかったです。おかげさまで2位の評価をいただくことができました。投票してくださった方に感謝しています。

資料はこちらです。

登壇者の方や、聞いてくださった方のブログもたくさん上がっているのであげさせていただきます。(公式レポートからの引用です。私も書いたよ!って人はお知らせしましょう!)

エンジニアの登壇を応援する忘年LT大会の感想 - 青空な日々

エンジニアの登壇を応援する忘年LT大会ーLT枠反省会&ラブレター #engineers_lt - hekitter's log

忘年LT大会 - 楳生庵(ばいなりあん)の閑居

エンジニアの登壇を応援する忘年LT大会 行ってきた - (仮)

エンジニアの登壇を応援する会忘年LT会12月27日@渋谷TechPlay|おやかた|note

エンジニアの登壇を応援する会_忘年LTで登壇してきた – お首が長いのよ

エンジニアの登壇を応援する忘年LT大会 - Above & Beyond

「エンジニアの登壇を応援する忘年LT大会」に行ってきた話 - だいだいそんな感じ。

LABO.YUKPIZ.ME

みなさん素晴らしいLTだったと思います。また振り返り会があるので、その際に色々お話できればいいなと思っています。

今回挑戦したこと

27枚目のこのスライドです。

一部では、スライドが間に合わなかったのか?という呟きもありましたが、このスライドは意図的に作りました。

LTをはじめプレゼンテーションは、誰がプレゼンをしているのでしょうか?

そう、プレゼンターです。資料ではないんです。

しかし、実際にはプレゼン資料に大量の文字を書き、プレゼン資料をただ読むプレゼンターと、それを聞いてる人たちの構図をよく目にします。

プレゼン資料に大量の文字を書いて読むだけならば、はっきり言ってその資料を聞く予定の人たちに展開すればいいだけです。(きちんと自分の言葉や、体験談を織り交ぜれば話は別です)

そうなってしまえばプレゼンなんてする必要がなくなってしまいます。

そこで自分はせっかく聞きに来て頂いてるんだから、自分の方を見て自分の言葉で話して、それを聞いてほしいと思いました。

そこでどうしようかを考えたのですが、それなら明確に自分の方を見て話を聞いてもらう時間を作ろう!俺がスライドなんだ!(意味不明)という思いで作成したスライドがこちらでした。

と、偉そうなことを言いつつ自分もまだまだ資料を見つつ喋っていますし、挙句の果てにはこのスライドのタイミングで40秒ぐらい話そうかと思ったのですが、最初の方の機材トラブルで時間を消費し20秒ぐらいで駆け足トークとなってしまいました。ここは非常に残念でした。

なかなかうまくいかないものですね。 精進したいと思います。

もちろんエモかった!!!など感想もいただけたのでよかったです。

本番のLTに対するご意見・ご感想・フィードバックもお待ちしております。

最後に有名な動画で恐縮ですが、自分が一番好きなiPhone発表のプレゼンテーションです。 ここまでシンプルに資料を作って、聴衆の方を見て、語りかけるようにプレゼンをする。目指したいところでもあり、いつかやりたいです。

www.youtube.com

ありがとうございました。

Google Apps ScriptからFirebase Realtime Databaseに書き込んでみる

f:id:yoshitaku_jp:20181227022440p:plain

目次

tl;dr

  • GoogleAppsScriptからRealtime Databaseに書き込んでみた

環境の説明

  • GoogleAppsScript
  • Realtime Database

を使います

内容

GASにライブラリを追加する

GASにRealtime Databaseが使えるようにライブラリを追加します。

リソースを選択肢、ライブラリをクリック

f:id:yoshitaku_jp:20181227020646p:plain

ライブラリを追加の空欄にMYeP8ZEEt1ylVDxS7uyg9plDOcoke7-2l を入力し、追加ボタンをクリック

f:id:yoshitaku_jp:20181227020657p:plain

バージョンを選択し、保存(2018/12/26現在29)

f:id:yoshitaku_jp:20181227020708p:plain

以上です!

マニフェストファイルをいじる

「表示」→「マニフェストファイルを表示」をクリックします

f:id:yoshitaku_jp:20181227020813p:plain

"oauthScopes":["https://www.googleapis.com/auth/userinfo.email","https://www.googleapis.com/auth/firebase.database","https://www.googleapis.com/auth/script.external_request"]

appsscript.jsonの末尾に追加します

f:id:yoshitaku_jp:20181227020833p:plain

実際に書き込んでみる

var token = ScriptApp.getOAuthToken();
var fb = FirebaseApp.getDatabaseByUrl("https://YOUR-REALTIME-DATABASE.firebaseio.com/", token);  
fb.setData('path/name' , `hoge`);

デモ

f:id:yoshitaku_jp:20181227012145g:plain

まとめ

  • GoogleAppsScriptからRealtime Databaseに書き込むことができた
  • Vueから操作するときとは違うので注意が必要
  • GoogleAppsScriptはSpreadsheetなどとも相性が良いのでいろいろできそう

一人アドベントカレンダー のおわり

一人アドベントカレンダー完走しました!

adventar.org

一年間通して継続することもですが、一月の間にこれだけ集中することも無かったと思います。

Firebaseを触るのが楽しくなり偏ってしまいましたが、これもまた面白いでしょう。振り返り記事をアドベントカレンダーに含めたくなかったのですが(これを含む)、技術検証の時間が取れなかったりしたので今回は仕方なかったかなぁという感じがしています。最後にストック記事が底をついてしまい投稿時間が遅くなりましたが、よく耐えたと思います。来年はやらないと思うけど、なんだかんだ明日から寂しい気持ちがあったりなかったり。

いろいろなことを犠牲にしなければ達成できなかったことですし、今回のアドベントカレンダーで見直すべき点も見えたので今後に生かしていきたいと思います。

振り返り記事は散々やってしまったので貼り付けのみで

yoshitaku-jp.hatenablog.com

yoshitaku-jp.hatenablog.com

yoshitaku-jp.hatenablog.com

yoshitaku-jp.hatenablog.com

浪人時代と同じぐらい頑張っていたと思う。2018年の自分は頑張った。いつまでも頑張っていける人でありたい。

f:id:yoshitaku_jp:20181225235524p:plain

良いお年を

write-blog-every-week Advent Calendar 2018 のおわり

f:id:yoshitaku_jp:20181225105238p:plain

Advent Calendar 2018完走ありがとうございました!

write-blog-every-week Advent Calendar 2018が終了しました!!!

ご参加いただいた方、本当にありがとうございました!自分が酔った勢いで立てたアドベントカレンダーが完走できるなんて思ってもいませんでした。本当に感謝の思いでいっぱいです。

細かくは言及しませんが、普段聞けないブログについての思いやブログを書くにあたって気をつけていることがたくさん読めました。中にはホッテントリ入りしたものもあります!気になるタイトルがありましたらすぐに読んで、すぐに書いた本人へフィードバックをお願いいたします。

adventar.org

write-blog-every-weekの今後

write-blog-every-weekは10月頃に発足し、おかげさまで現在36人のメンバーがいます。一時期爆発的にユーザが増えたこともあり、現在は新規入会をお断りしております。自分は2番目に入ったのでほぼすべてを見てきましたが、個人でコミュニティ運営するのは難しいなと感じています。今でもちょこちょこ問い合わせがあるようで、心苦しい気持ちでいっぱいです。参加者にアンケートを取っていますが、週に30本のブログが上がってくると読み切れない意見もあるので、しばらくは新規入会はおこなわれないと思います。参加したかった方、ぜひともご自身でコミュニティを立ち上げて運営していっていただけたらと思います。

kojirooooocks.hatenablog.com

write-blog-every-weekとしては、1月に2018年ブログ供養(もくもく会)&2019新年会をやったり、春あたりにはブログについてのLT大会(参加枠はブログ枠のみ)をやってみたいと勢いづいています。また何かお知らせできればと思います。

簡単ではありますが、締めのエントリとさせていただきます

良いお年を。

f:id:yoshitaku_jp:20181225173831p:plain

GitHub Appsを作成できるフレームワークProbotを使ってみた

f:id:yoshitaku_jp:20181224095404p:plain

tl;dr

目次

環境の説明

github.com

ここに書いてあるとおり環境の構築を進めてみます。

npx create-probot-app my-first-appでmy-first-appを作成していきます。 いくつか設問を受けますが、全てデフォルトで問題ないです。

yoshitaku$ npx create-probot-app my-first-app
npx: 213個のパッケージを11.251秒でインストールしました。

Let's create a Probot app!
Hit enter to accept the suggestion.

? App name: my-first-app
? Description of app: A Probot app
? Author's full name: yoshitaku_jp
? Author's email address: undefined
? Homepage:
? GitHub user or org name: yoshitaku
? Repository name: my-first-app
? Which template would you like to use? basic-js

yarnの人はこちらyarn create probot-app my-first-appです。

npm run devを実行し、起動確認をしましょう

cd my-first-app/
npm run dev

内容

npm run devを実行し、http://localhost:3000にアクセスする

この画面が出ていれば大丈夫です。

f:id:yoshitaku_jp:20181223220238p:plain

GitHubにアプリをインストールする

Register Appsをクリックし進みます。

f:id:yoshitaku_jp:20181223220238p:plain

どのアカウントにインストールするか決定します。

f:id:yoshitaku_jp:20181223230749p:plain

どのリポジトリに適用するか決定します。

f:id:yoshitaku_jp:20181223230953p:plain

これで完了です。

Issueを立ててみる

デフォルトで用意されている、index.jsにはissueがオープンになったときにbotが自動でコメントしてくれるものがあります。

module.exports = app => {
  // Your code here
  app.log('Yay, the app was loaded!')

  app.on('issues.opened', async context => {
    const issueComment = context.issue({ body: 'Thanks for opening this issue!' })
    return context.github.issues.createComment(issueComment)
  })

  // For more information on building apps:
  // https://probot.github.io/docs/

  // To get your app running against GitHub, see:
  // https://probot.github.io/docs/development/
}

起動していなければnpm run devを実行し、インストールしたリポジトリを開きIssueをオープンにしてみます。(オープンにしたあと、画面更新した)無事にbotからのコメントが入っています!

f:id:yoshitaku_jp:20181223232713p:plain

まとめ

【解決?】Probot appをGitHub Appに登録するときに出るAPI rate limit exceeded for xxx.xxx.xxx.xxx.エラー

tl;dr

  • Probot appをGitHub Appに登録するときにエラーが出た
  • ネットを検索しても同じ情報が出ないのでメモしておく
    • 自分の検索の仕方が悪いかもしれないが

エラー内容

HttpError: {"message":"API rate limit exceeded for xxx.xxx.xxx.xxx. (But here's the good news: Authenticated requests get a higher rate limit. Check out the documentation for more details.)","documentation_url":"https://developer.github.com/v3/#rate-limiting"}
    at response.text.then.message (/Users/yoshitaku/workspace/my-first-app/node_modules/@octokit/rest/lib/request/request.js:72:19)
    at process.internalTickCallback (internal/process/next_tick.js:77:7)

発生の状況

Probot appをGitHub Appに登録するときにエラーが出た

GitHub Appを構築するフレームワークProbot appを設定していたら上記のエラーが出ました。

developer.github.com

を見たり、

But here's the good news: Authenticated requests get a higher rate limitで調べてはいますがHomebrewでのエラーが出てきていてまだ解決には至っていません。

解決までの過程

時間が空いたら使えるようになった

【2018/12/24】 時間が空いたら使えるようになっていました。

解決策

時間が空いたら使えるようになった

【2018/12/24】 時間が空いたら使えるようになっていました。

FirebaseStorageを触ってみた

f:id:yoshitaku_jp:20181128144942p:plain

目次

tl;dr

  • FirebaseStorageを触ってみた
  • Firebase触ってみたシリーズの続編

内容

firebase.storageを使えるようにする

const ref = firebase.storage().ref()でトップディレクトリにあるデータを参照できます。 const ref = firebase.storage().ref('/hogehoge')でhogehogeディレクトリ配下のデータを参照することができます。

DownloadURLを取得する

dataで定義している変数に、getDownloadURL()でFirebaseStorageに保存してあるデータのURLをいれています。

  data () {
    return {
      icon_url: null
    }
  }

const url = ref.getDownloadURL().then(function(url){

      _this.icon_url = url;
    });

まとめ

  • CloudFirestoreよりかは設定が楽ですぐ使えた
  • RealtimeDatabaseと使い方が似ているのでとっつきやすかった。
    • RealtimeDatabaseを使ったことがある人はすぐに使えると思う。
  • 自分は画像ファイルを扱いたく、HTMLのimgタグのsrcにうまく渡せなくて躓いた。