RubyからEvernoteAPIを使ってノートブックの取得と、ノートの作成をする
以下参考
- EvernoteのAPIをRubyから叩きたい - kk_Atakaの日記
- OS-X LionでrubyからEvernoteをたたく環境を作ってみる - ksworks.org
- まぁるいしっぽ:Rubyで Evernoteを検索
- Evernote APIを使ってアプリケーションを作る例 (Ruby) - Masatomo Nakano Blog
APIキーの取得
ここでは、まず、自分の手元で動かしたかったので、「ClientApplication」でAPIキーを発行しました。
WebApplicationを選択した場合、OAuthでの認証が必要になるみたい。また次に試してみます。
Evernote API Overview | Evernote
Evernote API Overview | Evernote Photo by meganii
昔は、数日かかってたみたいですが、今は、すぐに発行してもらえました!
sandboxでのユーザ登録(2012/03/6追記)
Evernoteからは、まずsandbox(砂場)でアプリケーションをテストしてから、本番のアカウント使ってねっていうことでAPIキーをもらえるみたい。
っていうことで、まずは、https://sandbox.evernote.comでsandbox用のアカウントを作ります。
gemのインストール
以下のリンクから、EvernoteSDKをダウンロードできて、サンプルプログラムとかも入っています。
http://evernote.s3.amazonaws.com/api/evernote-api-1.20.zip
が、ゆとりは、まずgemを探します笑。
ちょうど、evernoteのgemがあったので、インストール。
gem install evernote
evernote | RubyGems.org | your community gem host
アクセストークンの取得
require 'rubygems' require 'evernote' user_store_url = "https://sandbox.evernote.com/edam/user" config = { :username => 'YOUR_USERNAME', :password => 'YOUR_PASSWORD', :consumer_key => 'YOUR_CONSUMER_KEY', :consumer_secret => 'YOUR_CONSUMER_SECRET' } user_store = Evernote::UserStore.new(user_store_url, config) auth_result = user_store.authenticate user = auth_result.user auth_token = auth_result.authenticationToken puts "Authentication was successful for #{user.username}" puts "Authentication token = #{auth_token}"
取得したAPIキーを、configに反映して、アクセストーンを取得
evernote_ruby ― tmux ― 80×24 Photo by meganii
ノートブックの取得
存在するノートブックの取得
note_store_url = "http://sandbox.evernote.com/edam/note/#{user.shardId}" note_store = Evernote::NoteStore.new(note_store_url) notebooks = note_store.listNotebooks(auth_token) puts "Found #{notebooks.size} notebooks:" notebooks.each { |notebook| puts " * #{notebook.name}"}
ノートの作成
ノートの新規作成。
ノートの作成についてはここを参考にしました。
Atsushi's Homepage 〜 Evernote API を使ってみる
note = Evernote::EDAM::Type::Note.new() note.title = "test" defaultNotebook = note_store.getDefaultNotebook(auth_token) note.notebookGuid = defaultNotebook.guid content = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>" + "<!DOCTYPE en-note SYSTEM \"http://xml.evernote.com/pub/enml.dtd\">" + "<en-note>" + "note" + "</en-note>" note.content = content #note.created = Time.now.getutc #note.updated = note.created puts "#{note}" puts note_store begin createdNote = note_store.client.createNote(auth_token, note) rescue Evernote::EDAM::Error::EDAMUserException => ex parameter = ex.parameter errorCode = ex.errorCode errorText = Evernote::EDAM::Error::EDAMErrorCode::VALUE_MAP[errorCode] puts "Authentication failed (parameter: #{parameter} errorCode: #{errorText})" exit(1) end puts "#{createdNote.guid}"
サンドボックスのノートを確認してみると、作成されました!!
https://sandbox.evernote.com
まとめ
ノートの作成のときに、例外が多発したから、ちゃんと例外処理を書いたら、エラーが判明。例外処理って大事だなって改めて思った。
次にしたいこと
- WebサービスとしてEvernoteAPIを叩くところをやってみる。
HerokuのチュートリアルからFacebookアプリを作る!
前回のTODOアプリをなんとかFacebookに絡めてみようと思って、Facebookアプリを作ってみる。SinatraでTwitterBootstrapを使ってTODOアプリを作ってみよう - ギークを夢見るじょーぶん男子
Herokuのチュートリアルを参考に作ってみよう!!
Getting Started with Your Facebook App on Heroku | Heroku Dev Center
チュートリアル
アプリケーションの作成
まずは、https://developers.facebook.com/appsから Create New Appで新規作成
なにやら、携帯かクレジットカードの番号を教えろと言われたから、携帯のアドレスを登録
Herokuのクラウドサービスを利用
以下のところから、CloudServiceとして Herokuを選択
Basic - Facebook Developers Photo by meganii
Basic - Facebook Developers Photo by meganii
Rubyを選ぶよ!
Basic - Facebook Developers Photo by meganii
次回
次は、生成されたこのFacebookアプリを触ってみようと思う。
SinatraでTwitterBootstrapを使ってTODOアプリを作ってみよう
Bootstrap, from Twitter
Bootstrap!!!!
TwitterBootstrapを使ってみたいと思っていたところに、ドットインストールでTwitterBootstrapのレッスンがあることを発見。
Twitter Bootstrap (v2.0)の基礎 - ドットインストール
改めてドットインストールをやって見たけど想像以上だった。動画で今まさに欲しい情報を見ることが出来るのって素晴らしい。Twitter Bootstrap 使ってみようかなぁってところだったので、これで導入がスムーズになりそう。jQueryのレッスンもあったので、受けてみようって思った。
publicフォルダにCSSを
最初、layout.erbと同じフォルダにTwitterBoostrapのcssフォルダを置いていて、なんでcssが読み込まれないんだろうと思っててたら、Sinatraでは、publicフォルダに静的ファイルを置く作りになってた。勉強不足...
Static Files
Static files are served from the ./public directory. You can specify a different location by setting the :public_folder option:set :public_folder, File.dirname(__FILE__) + '/static'
Note that the public directory name is not included in the URL. A file ./public/css/style.css is made available as http://example.com/css/style.css.Use the :static_cache_control setting (see below) to add Cache-Control header info.
SinatraでTODOアプリを作ってみよう
以下参考にさせてもらいました。
I Did It My Way
SinatraからDataMapperを使う(1)動作チェック用のコード - アインシュタインの電話番号☎
Bootstrap
"span6"とかclassの名前を指定するだけで、いい感じにしてしてくれるのは嬉しいですね。
layout.erb
<!DOCTYPE html> <html lang="en"> <head> <title>To Do List</title> <meta charset=utf-8 /> <link href="css/bootstrap.min.css" rel="stylesheet"> </head> <body> <div class="container-fluid"> <div id="header"> header </div> <h1>To Do List</h1> <div class="row-fluid"> <div class="span8" id="main"> <%= yield %> </div> <div class="span4" id="sidebar" style="background-color:green;">a</div> </div> <div id="footer"> footer </div> </div> <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js"></script> <script src="js/bootstrap.min.js"></script> </body> </html>
index.erb
<form action="/create" method="POST"> <label>task</label> <input type="text" name="user" id="name"> <input type="submit" value="Add Task!" class="btn" /> </form> <% @post.each do |p| %> <div class="span6" style="height:100px; margin:0 auto 0 auto"> <%= p.id %> <br /> <%= p.user %> <br /> <%= p.create_at %> </div> <% end %>
Gemfile
source :rubygems gem 'sinatra' gem 'dm-core' gem 'dm-sqlite-adapter' gem 'dm-migrations'
config.ru
require 'rubygems' require 'bundler' Bundler.require require './app.rb' run Sinatra::Application
app.rb
# -*- coding: utf-8 -*- DataMapper.setup(:default, 'sqlite3:db.sqlite3') class Post include DataMapper::Resource property :id, Serial property :user, String property :create_at, DateTime auto_upgrade! end get '/' do @post = Post.all.map{|r| "#{r.id}, #{r.user},#{r.create_at} <br />"} erb :index end get '/:id' do @post = Post.get(params[:id]) erb :post end get '/create' do post = Post.create(:user => params[:user],:create_at => Time.now) "#{params[:user]}" end post '/create' do post = Post.new(:user => params[:user]) if post.save status 201 redirect '/'+post.id.to_s else status 412 redirect '/' end end
jQueryを使ったブックマークレットで、TEDからmp4を抽出する
ブックマークレットが自分でサクサク書けるようになりたい。まずは、「TEDからmp4を抽出したい」ってところからブックマークレットのお勉強。
ついでに、jQueryも触ってみたいので、ブックマークレットでjQueryを使ってる例を探してみました。
以下のページを参考にさせてもらいました。
jQueryでブックマークレットを書く | ethertank diary
jQueryが読み込まれてるかどうか判定して、もしjQueryが読み込まれていなかったら、googleがホストしているjQueryライブラリを読みこめばよいみたい。Google Libraries API - Developer's Guide - Google Libraries API - Google Code
javascript:(function(){ if (typeof jQuery == 'undefined') { var d=document, j=d.createElement('script'); j.type='text/javascript'; j.src='http://ajax.googleapis.com/ajax/libs/jquery/1/jquery.min.js'; j.onload = bml; d.body.appendChild(j); }else { bml(); } function bml(){ (function($){ /* 任意のjQueryコード */ })(jQuery); } })();
ここでは、以下に公開されていたものを使わせてもらうことにする。
jQueryでブックマークレットを書く 3 | ethertank diary
javascript:(function(d, j, b) { function r() { setTimeout(function() { (typeof jQuery == 'undefined') ? r() : b(jQuery); }, 99); } if (j) b(jQuery); else { var s = d.createElement('script'); s.src = '//p.tl/Q9Fz'; d.body.appendChild(s); r(); } })(document, this.jQuery, function($) { $('*').css({'background':'#000','color':'ghostwhite'}); });
その中でも、短縮verを使わせてもらって、jQeuryコードを書いてみる。
javascript:(function(d,j,b){function r(){setTimeout(function(){(typeof jQuery=='undefined')?r():b(jQuery)},99)}if(j){b(jQuery)}else{var s=d.createElement('script');s.src='//p.tl/Q9Fz';d.body.appendChild(s);r()}})(document,this.jQuery,function($){ /*任意のjQueryコード*/ });
TEDのページから、ダウンロード用のmp4ファイルを見つける
Matt Cutts: Try something new for 30 days | Video on TED.com
jQueryを使うと、何が嬉しいかというと、jQueryの強力なセレクタが使えること。
TEDのページを見てみると、metaタグにmp4ファイルが指定されているみたい。
<meta property="og:video" content="http://download.ted.com/talks/MattCutts_2011U-320k.mp4" />
そこで、以下のようにセレクタを指定すると、のmp4ファイルのURLを取得できる。
$("meta[property='og:video']").attr("content")
以下、jQueryを使って、metaタグのmp4ダウンロードファイルを取得して、新しいwindowを開くブックマークレット。
スニペットを参考にさせてもらいました。jQueryでブックマークレットを書く 3 | ethertank diary
javascript: (function (d, j, b, s) { function r() { setTimeout(function () { (typeof jQuery == 'undefined') ? r() : b(jQuery) }, 99) }(j) ? b(jQuery) : d.body.appendChild(d.createElement('script')).src = '//p.tl/Q9Fz', r() })(document, this.jQuery, function ($) { window.open($("meta[property='og:video']").attr("content"), "new"); });
javascript:(function(d,j,b,s){function r(){setTimeout(function(){(typeof jQuery=='undefined')?r():b(jQuery)},99)}(j)?b(jQuery):d.body.appendChild(d.createElement('script')).src='//p.tl/Q9Fz',r()})(document,this.jQuery,function($){window.open($("meta[property='og:video']").attr("content"),"new");});
Emacsに導入したZencodingの初期カーソル位置をイケてる感じにする方法-yasnippetとzencoding-
Zencodingを導入したんだけど、展開後の初期カーソル位置がイケてないって思ってるあなたに。
ざっくり言うと、zencodingと一緒にyasnippetを導入して、展開するときのキーバインドにzencoding-expand-yasを指定すればよいみたい。
(define-key zencoding-mode-keymap (kbd "<C-return>") 'zencoding-expand-yas)
主に、以下のサイトを参考にさせてもらいました。
yasnippet, anything-c-yasnippetのまとめエントリー - IMAKADO::BLOG
参考にさせてもらいました
Emacs に、Zencoding.el と YASnippet.el の二つのスニペットをインストール:Goodpic
YASnippetの導入に関して
zencodingのダウンロード
rooney/zencoding - GitHubcd Dropbox/emacs/site-lisp/ git clone https://github.com/rooney/zencoding.git
yasnippetのダウンロード
capitaomorte/yasnippet - GitHubcd Dropbox/emacs/site-lisp/ git clone https://github.com/capitaomorte/yasnippet
yasnippetの設定(emacs.el)
(add-to-list 'load-path "~/Dropbox/emacs/site-lisp/yasnippet") (require 'yasnippet) (yas/initialize) (yas/load-directory "~/Dropbox/emacs/snippets/") ;snippetsのディレクトリを指定
zencodingの設定(emacs.el)
zencoding-expand-yas を指定するのがポイントみたい。
(add-to-list 'load-path "~/Dropbox/emacs/site-lisp/yasnippet") (require 'zencoding-mode) (add-hook 'sgml-mode-hook 'zencoding-mode) ;; Auto-start on any markup modes (add-hook 'html-mode-hook 'zencoding-mode) (add-hook 'text-mode-hook 'zencoding-mode) (define-key zencoding-mode-keymap (kbd "<C-return>") 'zencoding-expand-yas)
Zencodingのカーソル移動がいい感じに!!
Emacsを再起動させて、ul>*li*3
とかやったときに、TABで、いい感じのカーソル位置に移動してくれるようになりました。
これでちょっとは、動画のzencodingに近づけました。
弱い繋がりが生み出す強い力〜Dpub4に行って来ました!!〜
遅れましたが、2012年2月11日に Dpub4に行ってきました!!楽しかったです!!
相変わらずのビビリでしたが、いろんな中の人にお会いすることが出来ました!!これって凄いことですよね!
オフ会に行く前と行った後
オフ会に参加する前は、今までは、顔も人となりもわからなかった人が書いているブログ、作ってるアプリ、Webサービスを何気なく読んだり、使ったりしていた。
でも、オフ会に行った後では、その人の雰囲気がわかったあとで、次から使うiPhoneアプリ、Webサービス、ブログを使っていると、その向こう側にその人の顔が浮かんできる。
お会いして、顔が浮かぶ人が作ったアプリ、書いてるブログ、執筆された本を読むことができるってすごく面白い。
今までは、遠い存在だったブログ、ものすごく近い存在として感じられる。あの人が言ってることなら、読んでみよう。やってみようって思える。
弱い繋がりの生み出す強い力
弱い繋がりの強さを最近感じる。
普段は、顔を突き合わせることはないけど、Twitter,Facebookではゆるく繋がってる人たちがたくさんいる。
身近な人はもちろんだけど、こういったゆるくつながっている人に大きく影響されている。
ゆるく繋がってる人たちから多くの情報を得ている。
僕の目指したい人がたくさんいる。
そんな中行ってきたDpub4での@ttachiさんのエントリが印象的だった。
リアルとネットを繋げたい
「リアルとネットを繋げたい」僕が “Dpub” というイベントにこめた想いについて語ろう | No Second Life
"ネットとリアルを繋ぐ"
@ttachiさんも言ってるが、僕もiPhoneとTwitterが好きだ。
Twitterとの出会いは、2008年の10月。「hero見てる」
hero見てる
2008-10-05 15:25:05 via web
2008年当時周りには、Twiterの話題や、iPhone,Evernote,プログラミングについて話せるような人があんまりいなかった。
オフ会に参加するような人も周りにはいなかった。
ちょっとずつつぶやくようになって、ちょっとずついろんなイベントや、勉強会に参加するようになって、次第に、Twitterでの繋がりも増えてきた。
普段顔を合わせることはないけど、北海道から九州まで、Twitterでつながってる人がいる。
2008年に初めてつぶやいた「hero見てる」っていう僕のアカウントは、今や、たくさんの人に出会わせてくれた。
弱い繋がりが生み出す強い力。
これからのいろんな人とつながっていきたい。
いろんな人に影響されていきたい。
そして、ほんの少しだけ誰かに影響を与えられる人になれればいいな。
@ttachiさんをはじめ、Dpub幹事グループの皆様、そしてDpubに参加された、Developer,Publisher,User,Bloggerのみなさん楽しい出会いをありがとうございました!!今後ともよろしくお願いします!!!
How to start a movement
If you really care about starting a movement, have the courage to follow and show others how to follow. And when you find a lone nut doing something great, have the guts to be the first one to stand up and join in.
First follower is important.