ExamplePrivateModeRubyScript
From StatusNet
#!/usr/bin/ruby -w
#
# Script to demonstrate how to determine whether an instance of
# StatusNet is configured to be "private". -- By Zach Copley, CYI
#
require 'net/http'
require 'net/https'
require 'rexml/document'
include REXML, Net
API_ROOT = 'http://localhost/statusnet/api'
PUBLIC_TIMELINE_URL = API_ROOT + '/statuses/public_timeline.xml'
NICKNAME = 'nickname'
PASSWORD = 'password'
# get data from the API, return XML document
def get_api_data(url, nickname=nil, password=nil)
parsed_url = URI.parse(url)
request = HTTP::Get.new(parsed_url.path)
# add basic auth
if (nickname && password)
request.basic_auth nickname, password
end
http = HTTP.new(parsed_url.host)
response = http.request(request)
return response.body
end
# query StatusNet to see whether it's a private instance
def is_private()
config_url = API_ROOT + '/statusnet/config.xml'
config_xml = HTTP.get_response(URI.parse(config_url)).body;
doc = Document.new(config_xml)
# <config>
# <site>
# ....
# <private>true</private>
# ....
closed = XPath.first(doc, '/config/site/private/text()')
return closed == 'true' || false
end
# print statuses
def show_statuses(xml)
doc = REXML::Document.new(xml)
doc.elements.each('statuses/status') do |s|
puts s.elements['user/screen_name'].text + ': ' + s.elements['text'].text
end
end
unless is_private()
# request data as you normally would
show_statuses(get_api_data(PUBLIC_TIMELINE_URL))
else
puts "[Private site]"
# site is closed, so everything requires basic auth
show_statuses(get_api_data(PUBLIC_TIMELINE_URL, NICKNAME, PASSWORD))
end