Jan 2025【日本東北】溫泉三昧之旅① 在大雪飄落的雪國,追尋秘湯之宿與極上美食(秋田~探訪有日本溫泉界頂點之稱的秘湯乳頭溫泉鶴之湯)

圖片
飛機穿過厚重的雲層,眼前的世界瞬間變成一片白茫茫。大片的雪花,像是鵝毛般漫天飛舞,所有景物都披上了一層潔白的冬衣,只剩下模糊的輪廓,分不清是房屋、樹木還是道路。 下了飛機,一股寒風迎面而來,我不禁打了個寒顫,但也同時被眼前這片銀裝素裹的世界深深吸引。這就是東北的冬天啊!雖然寒冷,但卻充滿了獨特的魅力,如同一個冰雪的童話世界,等待著我們去探索。 我知道,這場大雪只是個開始,接下來幾天的旅程,將會是一場與冰雪共舞之旅。但我已經迫不及待地想要擁抱這片雪國大地,體驗這份獨一無二的冬季風情。 秋田位於日本本州島的北部,瀕臨日本海,冬天受到西伯利亞冷氣團的影響,降雪量非常豐沛。聽說這裡的雪可以堆積到好幾公尺高呢! 秋田的冬天,雖然寒冷,卻充滿了活力和熱情。首先,你可以在森吉山滑雪場滑雪,從雪道上俯衝而下,感受速度與激情!聽說那裡的樹冰也很有名,可惜這次我們沒時間去欣賞。 除了滑雪,秋田還有許多有趣的冬季活動。在橫手市的「橫手雪屋祭」,你可以看到各式各樣的雪屋,晚上點上燈,更是夢幻!聽說在雪屋裡還可以喝甜酒、吃麻糬呢! 當然,來到秋田,也別忘了品嚐當地的冬季美食。熱騰騰的米棒鍋,配上秋田特產的比內地雞和新鮮蔬菜,暖胃又暖心!還有,在寒冬中泡個暖呼呼的溫泉,更是人生一大享受! 剛踏進秋田機場的入境大廳,我就被眼前一個氣勢磅礡的「生剝鬼」給震懾住了!他身披粗獷的稻草蓑衣,手持木棒和裝滿白色紙片的桶子,臉上那副紅色面具更是令人印象深刻:獠牙外露、怒目圓睜,彷彿下一秒就要衝過來似的。 「生剝鬼」(なまはげ)是秋田縣男鹿半島的傳統民俗人物,也是當地家喻戶曉的傳奇角色。據說,生剝鬼是山神的使者,每年除夕夜都會來到村莊,挨家挨戶地驅趕懶惰和邪惡,為人們帶來好運和豐收。他們會大聲吼叫:「有沒有愛哭的小孩?有沒有不聽話的小孩?」,嚇唬孩子們要乖乖聽話,認真學習。 雖然生剝鬼看起來很可怕,但他們其實是善良的,是來保護人們的。生剝鬼的形象也反映了秋田人民勤勞勇敢、不畏艱難的精神。 生剝鬼的故事世代相傳,至今已有數百年的歷史。每年除夕夜,男鹿半島的村民都會舉行「生剝鬼節」,年輕人會裝扮成生剝鬼的樣子,挨家挨戶地拜訪,祈求來年平安順遂。 接著,我們從機場搭乘路線巴士來到了秋田車站,上次來造訪這裡,已是十年前的往事了。一踏進車站,我就被眼前這隻巨大的秋田犬玩偶給吸引住!它憨態可掬地趴在車站大廳中央,吐著粉嫩...

Extending Ruby on Rails Contacts Gem to invite Facebook friends

Contacts Gem 是一個能夠從Web Mail服務中匯入聯絡人列表的Rails插件,我們可以擴充它來支援匯入Facebook朋友列表,並發送邀請訊息給他們。

首先必須安裝Contacts plugin:
$script/plugin install git://github.com/cardmagic/contacts.git

另外我們還需要安裝Json Gem:
$sudo gem i jason

另外我們還需要安裝Mechanize Gem來使用其相依的Nokogiri:
$sudo gem i mechanize

現在我們可以打開Rails Console來檢查一下:
david@workstation:~/workspace/railscode$ script/console
Loading development environment (Rails 2.2.2)
>> Contacts
=> Contacts
view raw console hosted with ❤ by GitHub

現在到#{RAILS_ROOT}/vendor/plugins/contacts/lib/contacts目錄下建立一個page_scraper.rb:
require 'mechanize'
class Contacts
class PageScraper < Base
attr_accessor :agent
# creates the Mechanize agent used to do the scraping
def create_agent
self.agent = Mechanize.new
agent.keep_alive = false
agent
end
# Logging in
def prepare; end # stub
def strip_html( html )
html.gsub(/<\/?[^>]*>/, '')
end
end
end
view raw page_scraper.rb hosted with ❤ by GitHub

然後在同樣這個目錄下新增facebook.rb:
require 'page_scraper'
class Contacts
class Facebook < PageScraper
URL = "http://www.facebook.com/"
LOGIN_URL = "http://m.facebook.com/"
PROTOCOL_ERROR = "Facebook has changed its protocols, please upgrade this library."
def real_connect
create_agent
prepare
end
def prepare
page = agent.get(LOGIN_URL)
login_form = page.forms.first
login_form.email = @login
login_form.pass = @password
page = agent.submit(login_form, login_form.buttons.first)
raise AuthenticationError, "電郵地址或密碼有錯誤。" if page.body =~ /電郵地址或密碼有誤。/
#Friends Page
friends_links = page.links_with(:href => /\/friends.php/)
friends_link = ''
friends_links.each{ |flink| friends_link = flink.href if flink && flink.href && flink.text == 'Friends'}
raise ConnectionError, PROTOCOL_ERROR unless friends_link
friends_url = 'http://m.facebook.com' + friends_link
page = agent.get(friends_url)
#My Friends Page
friends_link = page.links_with(:href => /\/friends.php/)
@my_friends_link = ''
friends_link.each{|f| @my_friends_link = f.href if f.text == '朋友'}
@logout_url = page.link_with(:href => /logout/)
return true
end
def contacts
contacts = []
next_page = true
current_page = 2
my_friends_url = 'http://m.facebook.com' + @my_friends_link
page = agent.get(my_friends_url)
raise AuthenticationError, "請先登入。" if page.body =~ /輸入帳號和密碼。/
while(next_page)
next_page = false
data = page.search('//tr[@valign="top"]')
if data
data.each do |node|
td_nodes = node.children
if td_nodes
childs = td_nodes[0]
fr_name = childs.child.text
fr_href = ''
childs.children.each do |nd|
if nd.name == 'small'
nd.children.each do |n|
fr_href = n.attributes['href'] if n.name == 'a' && n.text == '訊息'
end
end
end
contacts << [fr_name, fr_href.to_s] unless fr_href.blank?
end
end
end # End Outer if
data = page.search('//div[@class="pad"]')
data.each do |node|
childs = node.children
next if childs.empty?
childs.each do |c|
if c.name == 'a' && c.text.to_i == current_page
next_page = 'http://m.facebook.com' + c.attributes['href'].to_s
break
end
end
end
current_page += 1
page = agent.get(next_page) unless next_page == false
end #End While
return contacts
end
def send_message(contact, message, subj=nil)
success = false
if contact
url_inbox = "http://m.facebook.com" + contact.last
page = agent.get(url_inbox)
raise AuthenticationError, "請先登入。" if page.body =~ /輸入帳號和密碼。/
page.forms.each do |f|
if f.has_field?('body')
f.subject = subj if subj && !subj.empty?
f.body = message
page = agent.submit(f, f.buttons.first)
return true if page.code == '200'
end
end
end
return success
end
def logout
agent.click @logout_url if @logout_url
return true
end
end
TYPES[:facebook] = Facebook
end
view raw facebook.rb hosted with ❤ by GitHub

最後編輯#{RAILS_ROOT}/vendor/plugins/contacts/lib/contact.rb添加下面內容:
require 'facebook'
view raw contacts.rb hosted with ❤ by GitHub

OK!完成了,現在可以打開Rails Console來測試一下:
david@workstation:~/workspace/railscode$ script/console
Loading development environment (Rails 2.2.2)
>> fb=Contacts::Facebook.new('你的facebook帳號','你的密碼')
...
...
>> contacts = fb.contacts
=> [["User1", "/inbox/?compose&ids=xxxxxxxxx&r22287202&refid=5"], ["User2", "/inbox/?compose&ids=xxxxxxxxx&rd297796c&refid=5"], ["User3", "/inbox/?compose&ids=xxxxxxxxx&raf7be31a&refid=5"]]
>> contacts.each{|c|fb.send_message(c, '你要發送的邀請內容', '訊息主旨')}
view raw console hosted with ❤ by GitHub

ps.目前聯絡人列表中,分頁的問題尚待解決!

熱門文章

Mar 2025【新竹五峰】油羅山森呼吸:擁抱原始柳杉林秘境之美(羅山林道第一登山口往返)

Aug, 2023【桃園大溪】桃園小百岳編號23-溪洲山步道|適合訓練腳力、還能觀賞石門水庫的山水景色

Jan 2025【日本東北】溫泉三昧之旅① 在大雪飄落的雪國,追尋秘湯之宿與極上美食(秋田~探訪有日本溫泉界頂點之稱的秘湯乳頭溫泉鶴之湯)

Nov 2024【陽明山溫泉】老字號「馬槽花藝村」的溫泉管線已恢復|在木造山景湯屋享受半露天硫磺溫泉

Jan 2025【日本東北】溫泉三昧之旅② 在大雪飄落的雪國,追尋秘湯之宿與極上美食(仙台~品嚐極上米澤牛&奧羽的百年藥湯-鎌先溫泉)

Jan 2025【苗栗泰安】泰安警光山莊泡湯&彰化CP值極高的日本料理|沐藏料理所X海龍王|彰化板前料理 ♨️🍁🥢🍲

April, 2023【彰化芬園】步道平坦好走!彰化八卦山「挑水古道」+十八觀音步道、碧山古道O形環走

Feb, 2024【台中西區】桃太郎日本料理|隱身巷弄裡的39年老字號無菜單料理|食材新鮮、自然美味

2019.10.9~13【令和元年の紅葉の山旅へ PART①】秋の贅沢、黒部川の源流へ北アルプス深部を縦走5日間!Day0、Day1(前泊、折立~藥師岳山莊)

日月潭四姊妹之水社大山與環湖自行車道~我去去就回!

文章列表

Contact

名稱

以電子郵件傳送 *

訊息 *