プログラミング Archive
PayPalのSandboxで”Please login to use the PayPal Sandbox features.”になる問題
- 2011-12-24 (土)
- プログラミング
クリスマスイブだというのに寂しくコードを書いています(;;)
さて、本題ですがPayPalの支払いのリダイレクトページについて、あちこちにサンプルコードがあります。たとえば
$fp = fsockopen (‘www.sandbox.paypal.com’, 80, $errno, $errstr, 30);
のようになっているサンプルがあるのですが、このままでは動作しません(少なくともこちらでは動作しませんでした)。”Please login to use the PayPal Sandbox features.”が出てきます。これについての日本語ページは探したところ1ページしかなく、期待する解決策はなかったためメモ書きを残すことにしました。英語だと7,500件出てきますが、そのうち何件が役に立つかは定かではありません。
ともあれ、実行するとこのような画面になってしまいログインを促されます。

この原因は
- https://developer.paypal.com/にログインしないと使えない
- クッキーにsequre属性が付いているからhttpsにしないとクッキーが無効になる
ことなので、解決策はsandboxにはhttpsでアクセスすることです。
いま、Google App EngineをPayPalから通知を受けるサーバとしてプログラムを書いています。Pythonは不慣れだから色々と大変です。
著者/訳者:Array
出版社:オライリージャパン( 2011-01-24 )
定価:¥ 3,570
大型本 ( 392 ページ )
ISBN-10 : 4873114756
ISBN-13 : 9784873114750
すっきりわかるGoogle App Engine for Javaクラウドプログラミング
著者/訳者:Array
出版社:ソフトバンククリエイティブ( 2010-07-02 )
定価:¥ 3,360
単行本 ( 480 ページ )
ISBN-10 : 4797357606
ISBN-13 : 9784797357608
- Comments: 0
- TrackBack (Close): 0
ミルカさんボット
ベクトルってつぶやきに反応してこっそり「…ヴェクタ」とつぶやくbotとかいないかな
という要望があったので作ってみた。
基本
ほとんどの手順は株ニュースと同じ。今回はTwitter::Searchを使う。結果をHashie::Meshで受け取るので、必要なものだけ取り出す。一度RTしたものには反応しないことにする。
以下ソース。
#!/opt/local/bin/ruby -Ku
require 'rubygems'
require 'mechanize'
require 'nokogiri'
require 'kconv'
require 'logger'
require 'oauth'
require 'twitter'
#---------------------------------------------------------------------------
# 定数
#---------------------------------------------------------------------------
CONSUMER_KEY = "きー"
CONSUMER_SECRET = "しーくれっと"
ACCESS_TOKEN = "とーくん"
ACCESS_TOKEN_SECRET = "とーくんしーくれっと"
#---------------------------------------------------------------------------
# Retweet
#---------------------------------------------------------------------------
def retweet( r )
user = r["from_user"]
text = r["text"]
id = r["id"].to_s
# もともと「ヴェクタ」を喋るものには反応しない
return if text.include?("ヴェクタ")
# 手抜き
f = open("recent_tweet.txt", "a")
f.close
# 過去にRTしているか調べる
f = open("recent_tweet.txt", "r")
while recent_id = f.gets
if recent_id.include?(id) then
f.close
return
end
end
# RTする
f = open("recent_tweet.txt", "a")
f.puts(id)
consumer = OAuth::Consumer.new(CONSUMER_KEY, CONSUMER_SECRET, :site => "http://twitter.com")
oauth = Twitter::OAuth.new(CONSUMER_KEY, CONSUMER_SECRET)
oauth.authorize_from_access(ACCESS_TOKEN, ACCESS_TOKEN_SECRET)
twitter_client = Twitter::Base.new(oauth)
tweet = "...ヴェクタ QT @#{user} #{text}"
twitter_client.update(tweet, {:in_reply_to_status_id => id})
# twitter_client.update(tweet)
$log.info("Twitterに投稿しました:" + tweet)
f.close
end
#---------------------------------------------------------------------------
# main
#---------------------------------------------------------------------------
def main
Twitter::Search.new('ベクトル').each do |r|
if r.class == Hashie::Mash then
retweet(r)
end
end
end
#---------------------------------------------------------------------------
# エントリポイント
#---------------------------------------------------------------------------
#$log = Logger.new("log.txt")
$log = Logger.new(STDOUT)
$log.level = Logger::INFO
main
Rubyでmixiの日記をバックアップする
- 2010-05-05 (水)
- Ruby
mixiを退会すると日記は消えてしまいます。その日記を手っ取り早く手元に残しておきたいとき、1つずつ手作業でやっていると大変です。ここではそれを自動化します。
準備
まず普通にWebブラウザでmixiにログインして日記を見ます。FirefoxだとFirebugが便利です。

FirebugでDOMツリーを見ていくと該当の部分が青く反転するので、必要な場所を絞り込んでいきます。最後に、右クリックをして「XPathをコピー」を選んでやると、XPathを入手できます。

xpathを入手したら、これを利用して解析していきます。ただし、Firefoxではtbodyタグを勝手に挟むため、これを除去します。
コード
#!/usr/local/bin/ruby -Ku
require 'rubygems'
require 'mechanize'
require 'nokogiri'
require 'kconv'
# 簡易待ち付きget
def get(url)
sleep(10)
$agent.get(url);
$agent.page.encoding = "UTF-8"
end
#変数
owner_id = mixiのID
diary_url = "http://mixi.jp/list_diary.pl?id=#{owner_id}"
# mixiのトップページにアクセス
$agent = Mechanize.new
$agent.get("http://mixi.jp/")
$agent.page.encoding = "UTF-8"
# ログイン
$agent.page.form_with(:name => "login_form" ) do |f|
f.field_with(:name => 'email').value = "めーるあどれす"
f.field_with(:name => 'password').value = "ぱすわーど"
f.click_button
end
puts "ログインしました"
# 日記トップを取得
get(diary_url)
parser = Nokogiri::HTML.parse($agent.page.body, nil)
diary = parser.xpath("/html/body/div/div[2]/div/div[3]/div[2]/div[2]").to_html.toutf8
diaries = diary.scan(/
Home > プログラミング
- Search
- Feeds
- Meta
















