| 次のページ >>

スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

tumblife-for-rubyでtumblrにオーディオファイルをpostする(2012-09)

(1) http://www.tumblr.com/oauth/apps でアプリを登録して consumer key と consumer secret を取得する。
(2) 次のスクリプトで access token, access token secret を取得する。

require 'oauth'

CONSUMER_KEY    = '{your consumer key}'
CONSUMER_SECRET = '{your consumer secret}'

consumer = OAuth::Consumer.new(
  CONSUMER_KEY,
  CONSUMER_SECRET,
  { :site => 'https://www.tumblr.com/' }
)

request_token = consumer.get_request_token
provider_auth_url = request_token.authorize_url
puts provider_auth_url

system "firefox #{provider_auth_url}"
# ブラウザで「許可」ボタンを押して許可する

# リダイレクト先のURLを入力
puts "Enter URL with oauth verifier: "
url_with_oauth_verifier = STDIN.gets.strip
/oauth_verifier=(.+)$/ =~ url_with_oauth_verifier
oauth_verifier = $1
puts "oauth_verifier: '#{oauth_verifier}'"

access_token = request_token.get_access_token(:oauth_verifier => oauth_verifier)

puts <<EOB
----
  config.consumer_key       = '#{CONSUMER_KEY}'
  config.consumer_secret    = '#{CONSUMER_SECRET}'
  config.oauth_token        = '#{access_token.token}'
  config.oauth_token_secret = '#{access_token.secret}'
EOB

(3) 上記で取得した consumer key, consumer secret, access token, access token secret を指定して tumblife for ruby を使う。

require 'tumblife'
 
Tumblife.configure do |config|
  config.consumer_key       = '{your consumer key}'
  config.consumer_secret    = '{your consumer secret}'
  config.oauth_token        = '{your access token}'
  config.oauth_token_secret = '{your access token secret}'
end

client = Tumblife.client

caption = <<EOB
<p>
"<span class="track_title">Break That Groove Muffin</span>" by Shnabubula
<br />from album "<a href="http://ubiktune.org/releases/ubi014/">Adventure Magic Supreme Journey Music [ubi-014]</a>" 
<br /><a href="http://creativecommons.org/licenses/by-nc-nd/3.0/">CC BY-NC-ND 3.0</a>
</p>
<p>
(via <a href="http://phlow-magazine.com/charts/1732-sergio-de-prado-best-creative-commons-music-moments-2010">Sergio de Prado’s Best Creative Commons Music Moments 2010</a>)
</p>
EOB

client.audio(
  "anbtradio.tumblr.com",
  :caption => caption,
  :data => Faraday::UploadIO.new("./shnabubula__break_that_groove_muffin.mp3", "audio/mpeg")
)
これでできました。

環境

ruby 1.9.2p180
oauth-0.4.7
tumblife-1.2.0

参考

スポンサーサイト

(solved)Ruby/Webrick/CGI: cgi_runner.rb:47:in `exec': Permission denied ... (Errno::EACCES)

簡単なCGIを使いたくて昔書いたやつから適当にコピペして動かしたら 次のようなエラーメッセージが出て Internal Server Error になった。

2012-02-10 22:45:16] ERROR CGIHandler: /home/user/webrick-test/www/cgi/hello.rb:
/home/user/.rvm/rubies/ruby-1.9.2-p180/lib/ruby/1.9.1/webrick/httpservlet/cgi_runner.rb:47:in `exec': Permission denied - /home/user/webrick-test/www/cgi/hello.rb (Errno::EACCES)
        from /home/user/.rvm/rubies/ruby-1.9.2-p180/lib/ruby/1.9.1/webrick/httpservlet/cgi_runner.rb:47:in `
' [2012-02-10 22:45:16] ERROR CGIHandler: /home/user/webrick-test/www/cgi/hello.rb exit with 1 [2012-02-10 22:45:16] ERROR Premature end of script headers: /home/user/webrick-test/www/cgi/hello.rb localhost.localdomain - - [10/Feb/2012:22:45:16 JST] "GET /cgi/hello.rb HTTP/1.1" 500 354 - -> /cgi/hello.rb

パーミッションがどうとか言われているけど、 WEBrick::HTTPServer.new の引数で :CGIInterpreter を指定したら動いた。


require 'webrick'

document_root = '/home/user/webrick-test/www'

server = WEBrick::HTTPServer.new({
  :DocumentRoot => '/home/user/webrick-test/www',
  :BindAddress => '0.0.0.0',
  :CGIInterpreter => '/usr/bin/ruby', # <= これ
  :Port => 10081
})

['/cgi/hello.rb'].each {|cgi_file|
  server.mount(cgi_file, WEBrick::HTTPServlet::CGIHandler, document_root + cgi_file)
}

['INT', 'TERM'].each {|signal|
  Signal.trap(signal){ server.shutdown }
}

server.start

Yapra: hAtomまたはユーザ定義XPathを使ってウェブページをフィードに変換するプラグイン

表題の通りです。 再発明くさいのですが、他のプラグインから呼び出して使うことを想定して作っています

単体でも使えなくはないです。RSS::save に渡せばフィードとして保存できたりします。

ダウンロード

https://gist.github.com/raw/824665/2fcfd878b2cfd5f8e50aab97282c537213bbe453/extract.rb

{class base plugin dir}/yapra/plugin/feed/extract.rb として保存してください。

コード


Yapra メモ … その他の Yapra 関連記事についてはこっちにまとめてあります

Yapra: フィードの要約を表示するプラグイン

「何かのプラグインでフィードを生成する → 結果を見る → パラメータなど修正」 という手順のうち、結果を確認する部分がめんどくさかったので作ってみました。

設定ファイルをいじってフィードを生成する場合だけでなく、 フィードを加工するプラグインを作る場合にも便利。


# test.yaml
- module: RSS::load
  config:
    url: http://feeds.fc2.com/fc2/xml?host=haraita9283.blog98

- module: Feed::PrintSummary
  config: 
    size: 3

このように設定ファイルを書いて端末から実行すると、標準出力に次のように出力されます。

$ yapra -c test.yaml
(略)
title: [Yapra: クラスベースのプラグインの書き方とファイル配置、パスの通し方]
date: [2011-02-08T00:05:20+09:00]
link: [http://haraita9283.blog98.fc2.com/blog-entry-407.html]
description: [Yapra のプラグインには legacy なもの class base なもの の 2種類あり、新たに自作する場合はクラスベースな方が推奨されているらしい。 参考: とりあえずネタ振り的なも ...]
--------------------------------
title: [whileループで動き続けるプログラムをログアウト時に終了させる(Ubuntu 10.10)]
date: [2011-02-05T22:07:22+09:00]
link: [http://haraita9283.blog98.fc2.com/blog-entry-406.html]
description: [注)いろいろよく分かってない人が書いてます。 1 環境 2 期待する動作 3 詳細 3.1 SIGHUP は送信されているか?3.2 明示的に SIGHUP を送信する 4 まとめ 5 備考 ...]
--------------------------------
title: [ローカルファイルシステムのファイルをHTTPで取得できるようにする(Ruby/WEBrick)]
date: [2011-02-01T01:10:36+09:00]
link: [http://haraita9283.blog98.fc2.com/blog-entry-405.html]
description: [あるファイルをローカルファイルシステムに置いて別のアプリケーションから利用したいが、 そのアプリケーションはネット上のリソースを使うことを前提としている、という場合があります。 たとえば Fi ...]
$ 

コード


# -*- coding: utf-8 -*-
require 'yapra/plugin/base'

module Yapra::Plugin::Feed

  # description:
  #
  # Data must be a collection of RSS::RDF::Item instance.
  # 
  # example:
  # 
  # - module: Feed::PrintSummary
  #   config: 
  #     reverse: true
  #     size: 10
  #     description_length: 100
  # 
  # config is optional.

  class PrintSummary < Yapra::Plugin::Base
    def shorten(element, length)
      return nil if element.nil?

      chars = element.gsub(/\s+/, " ").strip.split(//u)
      if chars.size > length
        chars = chars[0...(length-4)]
        chars << " ..."
      end

      chars.join("")
    end

    def run(data)
      description_length = config["description_length"] || 200

      summaries = data.map{|item|
        temp_item = item.clone

        if temp_item.description.respond_to? :inner_text
          temp_item.description = temp_item.description.inner_text
        end

        temp_item.description = shorten( temp_item.description,
                                         description_length )

        %w(title date link description).map{|field|
          "#{field}: [%s]\n" % temp_item.send(field)
        }.join("")
      }

      summaries.reverse! if config["reverse"]

      if config["size"]
        summaries = summaries[0...( config["size"] )]
      end

      puts summaries.join("-"*32 + "\n")

      data
    end
  end
end

関連記事


Yapra メモ … その他の Yapra 関連記事についてはこっちにまとめてあります

Yapra: クラスベースのプラグインの書き方とファイル配置、パスの通し方

Yapra のプラグインには

  • legacy なもの
  • class base なもの

の 2種類あり、新たに自作する場合はクラスベースな方が推奨されているらしい。

参考: とりあえずネタ振り的なものを - yapra | Google グループ

以下、クラスベースのプラグイン自作についてメモ。


Ruby の $LOAD_PATH/foo/bar/ が含まれていると、 その下のディレクトリ階層がクラスの階層に対応する。

たとえば設定ファイルをこのように書きたい場合、

- module: Foo::BarBaz
  config: #...

プラグインを次のように書き、 /foo/bar/yapra/plugin/foo/bar_baz.rb (={ロードパスの通ったディレクトリ}/yapra/plugin/foo/bar_baz.rb) として保存する。


require "yapra/plugin/base"
 
module Yapra::Plugin::Foo
  class BarBaz < Yapra::Plugin::Base
    def run(data)
      puts "plugin Foo::BarBaz"
      p config
      # ...
      return data
    end
  end
end

クラスベースのプラグインを自作して使いたいが Yapra のインストールされているディレクトリや site_ruby には余計なものを入れたくない。 かといってわざわざ gem にするほどでもない。 そういう場合は、Ruby の -I オプションを使って別のディレクトリを指定するのが良いかもしれない。

そこで、次のようなシェルスクリプトを用意した。


#!/bin/bash
 
YAPRA_DIR=~/my-yapra/yapra
MY_PLUGIN_DIR_CLASS_BASE=~/my-yapra/my-dir-class-base
 
ruby -I ${YAPRA_DIR}/lib \
     -I ${MY_PLUGIN_DIR_CLASS_BASE} \
     ${YAPRA_DIR}/bin/yapra \
     "$@"

レガシーなプラグインも使いたい場合は (Ruby ではなく Yapra の) -p オプションで指定する。


#!/bin/bash
 
YAPRA_DIR=~/my-yapra/yapra
MY_PLUGIN_DIR_CLASS_BASE=~/my-yapra/my-dir-class-base
MY_PLUGIN_DIR_LEGACY=~/my-yapra/my-dir-legacy
 
ruby -I ${YAPRA_DIR}/lib \
     -I ${MY_PLUGIN_DIR_CLASS_BASE} \
     ${YAPRA_DIR}/bin/yapra \
     -p ${MY_PLUGIN_DIR_LEGACY} \
     "$@"

Windows XP でも次のようなバッチファイルで同じように動かせました。

- ruby 1.9.2p136 (2010-12-25 revision 30365) [i386-mswin32]
- Yapra 0.1.3

@echo off

set YAPRA_DIR="c:\dev\yapra"
set MY_PLUGIN_DIR_CLASS_BASE="C:\dev\yapra\my-plugin\class-base"
set MY_PLUGIN_DIR_LEGACY="C:/dev/yapra/my-plugin/legacy"

ruby192.bat ^
  -I "%YAPRA_DIR%\lib-plugins" ^
  -I "%MY_PLUGIN_DIR_CLASS_BASE%" ^
  "%YAPRA_DIR%\bin\yapra" ^
  -p "%MY_PLUGIN_DIR_LEGACY%" ^
  %*

関連記事

参考(外部リンク)



** ホームに戻る

| 次のページ >>
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。