Google Apps Scriptでスクレイピング

GAS使えると便利〜と毎日つぶやいてるドラ(マコト)です。
そうなんです。社内ツールでspreadsheetを使う機会が圧倒的に多いのでGASは便利すぎる奴なんです。
今日はデータの入力などちょっと面倒な作業をspreadsheetにまとめたい時に使えるスクレイピングに挑戦! 後はトリガーとなるメイン関数を書いて引数を持たせて上げれば完了!
これはいい意味でハマる!
gas_part2

Google Apps ScriptでAPIをぶっ叩く②

正規表現に絶賛苦戦中のどら(マコト)です. 前回DoorKeeperからGASを使ってイベントの情報を取ってきた 今回はその他のイベントサイトからAPIを叩いて少しこったものにしてみる 今回はこの4つからそれぞれ タイトル、URL、場所、開始時間、終了時間を取ってくる * DoorKeeper * こくちーず * Partake * Zusaar まずソースはこんな感じ requset.gs 最近正規表現の勉強をしたので改めてみてみるとsplitのあたりとかもっとうまくできるなsplit(“[-T]”)とかな まあ動くことは動くということでとりあえずいいでしょう(笑) あとはそれぞれのページにトリガーとなるようなボタンを配置してメソッドを設定してやればよい gas_part2 更新ボタンを押すことで最新の情報を最大100件まで取ってくることができる うんうん!いい仕事したな(笑) 結構GASにいい意味でハマって来たので今はマーケティングを作業の効率化を図るためスクレイピングを試してるところ そのための正規表現なんだけどね、、、

Java学習記録~復習:標準クラスを使ってみる

最近APIを叩くことにハマりまくってるドラ(マコト)です。 日付を扱うDateクラスの存在は知っているけど、その時その時調べればいいやとあまり本格的に学ばなかったので、今回はDateクラスについて復習してみる。 どうやらJavaでは日付を扱う方法が4パターンあるらしい 一つがエポックと呼ばれるものである日にちからミリ秒単位で日時情報を表現するものらしい long型を使って表現するためコンピュータにとって扱いやすい 例えばこんな感じ TakeTime.java 結果 ただこれだと年月日時分秒を読み取ることができない そこで使うのがよく見かけるDateクラス このインスタンスはそのまま現時刻を取得することができる またインスタンスを生成する際、long型の引数を持たせてやれば、long値の日時を持つインスタンスを生成することができる UseDate.java 結果 とこんな感じでよく見慣れてる(笑) でもこれでも結局はエポックから経過ミリ秒を使っているのに間違いはないらしく人間が扱うには少し不便だ そこでDateインスタンスから年月日時分秒をそれぞれ抜き出してみる 結果 この他にもString型のインスタンスとしても扱うことができる 結果 といった感じ
gas

Google Apps Script でDoorkeeperのAPIを叩きたい

ドラ(マコト)です。 仕事で営業さん向けにエンジニアのイベントの情報を集めて、まとめることになった DotsやDoorkeeperなんかの情報を引っ張ってきてやればいいのだけど、いちいちコピペしてたら日が暮れる、、、 そこでDoorkeeperのAPIを叩いて必要なパラメータだけ抜き出したい 営業さんはもっぱらGoogle Driveで特に spreadsheetで色々共有しているため、gasでAPIを叩いてみる Doorkeeper API Response jsonはこんな感じで取ってこられるので、基本的な情報だけを抜いてみるとこんな感じ get.gs かなり男の料理感はあるけど、とりあえず動けばいい あとはこれを実行してやればいいだけ 結果 get.gs結果 動くには動く(笑) 今回はtitle、address、url、starts_at、ends_atを取ってきたけど、addressは都内に絞りたいし、時間のフォーマットも変えたいので次の課題だな
icon512@x1

iOS版 パウダールームマップ ついにリリース!

ドラ(マコト)です。
今朝ようやくiOS処女作がリリースされました。 思い返せば1ヶ月前。。。
我が子を保育園にあずけるがごとく、appStoreに申請し、いろいろな理由で受け取れないと言われ続けた10月
僕「どうかよしになにお願いします」 appleさん「説明が足りひんよ。それじゃ受け取れません。」
appleさん「使い方がわからんから、動画送れ」
appleさん「全然バックグラウンド関係ねぇーじゃねぇか!バックグラウンドモード切って出なおして来い」 そして計三回のリジェクトをくらい今日ついに “出してええよ♫” ありがとうございます!
早速勉強会でお世話になった人や個人的に相談に乗ってもらった人にリリース報告をして回りました。
そのフィードをみて早速ダウンロードしてくれた人もいて、色々なコメントをたくさんいただきました。
本当に我が子を保育園に送り出したかのような嬉しい1日でした。
というわけで以下からiOSユーザーの方はご利用いただけます。 パウダールームマップ

Java学習記録~復習:継承~

ドラ(マコト)です。 先日のSwift勉強会の熱が冷めやらんなか、Javaもやらないとと思いやってとるわけですよw オブジェクト思考でも苦手に感じる人も多い継承、、、 でも時間が解決したのか経験なのかそこまで突っ込んだ内容はやっていないけど、意外と継承はできるw ただただ親クラスをお元に新しいクラスを定義して、機能を加えたり上書きしてやればいいだけ こんなふうに CatTypeRobot SuperCatTypeRobot Main.java 海外版ドラえもんの出来上がり!www でも例えばDocTypeRobotの要素も取り入れたいなと思って をCatTypeRobotと同時に継承することはできない。一般的にJavaでは多重継承が禁止されている。

オーバーライド

ただただ継承して機能を追加するだけではなく、既にある機能を上書きすることもできる.それがオーバーライド SuperCatTypeRobot.java Main.java 実行結果 Stringクラスなどfinal宣言されているクラスはオーバーライドができないようになっている
PB210250

Swift勉強会で”Swift知識ゼロから3週間で少し凝った地図アプリを作った話”をした話

pic1 ドラ(マコト)です。 11月21日土曜日Swiftビギナーズ勉強会 第11回に参加してきました。 そこでこの1ヶ月かけて作ったiOSアプリについて簡単な発表をしてきました。

発表してみて

初めての参加でかつ初めてのセッション、、、
そんな状態の僕でも暖かく迎え入れてくれて、ものすごく発表しやすかった♫
今回発表した内容はこれからswiftを学ぶ人にとって僕自身がSwiftを学んだ経験を少しでも共有したくて、感想などをまとめたものです。
技術的な内容は少なかったにも関わらず、発表後色々な方々にアドバイスやコメントを頂き、発表できてよかったと心から思える会でした。 pict2

セッション後はみんなでもくもく会!

そこでは今回詰った内容を改めてベテランのSwifetr(swiftエンジニアを勝手に命名w)の方々に相談できて、これまた色々学べる機会になりました。
一番びっくりしたのは、ライブラリの導入方法を教えてほしいとか、githubにコードを共有してほしいwとか、教えられる側で参加したつもりがもくもく会の半分は教える側に回っていたことw
これはほんとにびっくりー
でも僕自身まだまだ勉強段階で期待に答えられるような回答ができたかわからないけど、今回の経験がかなり次の挑戦へ勇気づけてくれたように思います。 githubについては近日中にちょっとしたものをあげようと今まとめてるw 本当にいろいろな出会いがあって素晴らしい会でした!!
また次回も参加したい!そして何かしらの発表もしたい!

Swiftビギナーズ勉強会 第12回

pic3 pic4

Java学習記録~復習:カプセル化~

夏休みをもらい実家に帰った時にカプセル化って具体的に何?と弟に聞かれた時に”プログラム内で不正に値を変えられないようにすることだよ?”としか答えられず改めて自分の勉強不足を知った8月 そして11月 改めてカプセル化について復習しなおしてみる

アクセス修飾子

フィールドを操作されたくない場合、フィールドの宣言と同時にprivateを宣言する privateは同じクラスないからでしかアクセスすることができないため、他のクラスから呼び出されることはない privateのように他からのアクセスを制限するものをアクセス修飾子という。 privateのほかにもメンバに関しては以下のアクセス修飾子がある
  • private: 同じクラスないからのみアクセス可能
  • package private: 同じパッケージからのみアクセス可能
  • protected: 同じパッケージ内もしくはサブクラスからのみアクセス可能
  • public: どこからでもアクセス可能
でもprivateにしちゃったらフィールドの値を取り出すだけでなく、アクセスすらできなくなっちゃうじゃん! そこで必要なのがgetterメソッドとsettrメソッド

getterとsetter

read only、write onlyのフィールドを実現できる フィールドの名前などクラスの内部設計などを自由に変更できる フィールドへのアクセスを検査できる

getter

クラスの内のフィールドの値を取り出すだけのクラス 実行結果

setter

クラス内のフィールドに値をセットするだけのクラス 実行結果 setterとgetterにより不正な操作を防ぐことができる

クラスに対するアクセス制御

  • public
  • package private
非publicクラスの特徴
1, ファイル名=クラス名でなくてもいい
2, 一つのソースファイルに複数宣言してもよい

じゃあ結局カプセル化って何?

外部からフィールドの操作をされないようにメソッドによってフィールドを保護すること いい感じで復習できた♫

コンストラクタと静的メンバを実際に使ってみる

ドラ(マコト)です。 今までデータベース接続するdao度に を書いてた. さらにはテスト環境、本番環境の各パラメータの統一ができていなかったため、環境を変えるたびにそれぞれのパラメータを入力していた。流石にこれはダルすぎる… そこでこれまでコンストラクトと静的メソッドを使ってきたことだし、どうにかならないかと思って少しいじってみた。 あとはこれをそれぞれのdaoで使ってやればいい Accessメソッドはクラスメソッドとして使いたかったが、どうにもうまく行かなかったので、無駄にコンストラクタを使ってインスタンス化している、、、 それでもuerNoの値を切り替えるだけでそれぞれの環境の切り替えが楽になる
もっといい方法はあると思うけど、今回はこんなところで勘弁…

Java学習記録~復習:静的メンバ~

ドラ(マコト)です。 今日もTech Crunch Tokyo 2015に参加してきました。 今日も昨日に増して胸熱!!! 特にスタートアップバトルね! 詳しい内容は今週末にまとめて書きます。 今日は引き続きJavaの復習です。メモメモ。。。

静的メンバについて

インスタンスごとにそれぞれに値を与えることになるけれど、共通の値を保って痛い場合がある Character.java Main.java 実行結果 たとえばのび太くんが四次元ポケットを使う場合、このままでは四次元ポケットは空のままで新たに道具を追加したいといけない でもstaticを使うだけで解決できる Character.java Main.java 実行結果 つまり共通の変数として値を持つことができる これが静的フィールド メソッドも同様である Character.java Main.java 実行結果 となる。注意しなければならないのはstaticがついていなフィールドやメソッドは使えないということ