http://svn.coderepos.org/share/lang/perl/Cache-Memcached-Fast-0.12/
svn diff -r19958
リポジトリを作成し直しました。最新取得しなおして下さい。
チェックアウトしてそのままビルドして頂いてもいいです。libmemcachedはgccとVisual Studioをサポートしましたが、今回はgcc限定にしました。
よろしければ、どうぞ。
http://svn.coderepos.org/share/lang/perl/Cache-Memcached-Fast-0.12/
svn diff -r19958
Wassr [お気軽メッセージングハブ・ワッサー]
質問です。Firefox の Live HTTP Headers で確認すると Web のフォームから画像をアップロードすると素のバイナリデータが送信されています。API を利用した POST でも素のバイナリデータで送信しなければならないのでしょうか?
http://wassr.jp/channel/wassr_api/messages/hNHcDCCtja
function writeToFile (filePath, content) {
try {
netscape.security.PrivilegeManager.enablePrivilege ('UniversalXPConnect');
var file = Components.classes["@mozilla.org/file/local;1"].createInstance (Components.interfaces.nsILocalFile);
file.initWithPath (filePath);
if (! file.exists ()) file.create (0, 0664);
var out = Components.classes["@mozilla.org/network/file-output-stream;1"].createInstance (Components.interfaces.nsIFileOutputStream);
out.init (file, 0x20 | 0x02, 00004, null);
out.write(content, content.length);
out.close();
} catch (e) {
throw e;
}
}
で、最後の最後は自前でCGIを立ててデータを確認してみた所、なんとデータが欠けてる!!XMLHttpRequest - MDCはよ言えや!
This method was added in Firefox 3.
A variant of the send() method that sends binary data.
void sendAsBinary(Parameters
in DOMString body
);
body
https://developer.mozilla.org/en/XMLHttpRequest#sendAsBinary%28%29The request body as a DOM string. This data is converted to a string of single-byte characters by truncation (removing the high-order byte of each character).
function createMultipartData(data, boundary) {
var ret = [], boundary = "BOUNDARY-" + (boundary||'')+Math.floor(0x1000000 + Math.random() * 0xffffff).toString(16);
for (var item in data) {
if (!data.hasOwnProperty(item)) continue;
var obj = data[item];
if (obj.filename) {
ret.push(
'--' + boundary,
'Content-Type: '+obj.contentType,
'Content-Length: '+obj.content.length,
'Content-Disposition: form-data; name="'+item+'"; filename="'+obj.filename+'"',
'Content-Transfer-Encoding: binary',
'',
obj.content
);
} else {
ret.push(
'--' + boundary,
'Content-Disposition: form-data; name="'+item+'"',
'',
String(obj)
);
}
}
ret.push('--' + boundary + '--', '');
return {
contentType : "multipart/form-data; boundary=" + boundary,
content: ret.join("\n")
};
}
function getFileContents(aFilePath) {
var file = Components.classes['@mozilla.org/file/local;1'].createInstance(Components.interfaces.nsILocalFile);
file.initWithPath(aFilePath);
var fstream = Components.classes['@mozilla.org/network/file-input-stream;1'].createInstance(Components.interfaces.nsIFileInputStream);
fstream.init(file, 1, 1, Components.interfaces.nsIFileInputStream.CLOSE_ON_EOF);
var bstream = Components.classes['@mozilla.org/network/buffered-input-stream;1'].createInstance(Components.interfaces.nsIBufferedInputStream);
bstream.init(fstream, 4096);
var binary = Components.classes["@mozilla.org/binaryinputstream;1"].createInstance(Components.interfaces.nsIBinaryInputStream);
binary.setInputStream(fstream);
var data = "", size = 0;
while ((size = binary.available()) > 0) {
data += binary.readBytes(size);
}
return data;
}
var sendData = createMultipartData({
status: "image upload from vimperator!",
source: "vimperator/wassr.js",
image: {
filename: "example.jpg",
contentType: "application/octet-stream",
content: getFileContents("C:\\example.png")
}
});
var req = new XMLHttpRequest();
req.open("POST", "http://api.wassr.jp/statuses/update.json");
req.setRequestHeader("Content-Type", sendData.contentType);
req.setRequestHeader("Content-Length", sendData.content.length);
req.sendAsBinary(sendData.content);
こんなんでどうでしょうか?
diff --git a/tw2.py b/tw2.py
index fb04179..98fe90a 100755
--- a/tw2.py
+++ b/tw2.py
@@ -73,6 +73,9 @@ if __name__ == "__main__":
friends = set()
friendsTimeLine = []
+ def _T(text):
+ return text.encode('mbcs', 'ignore')
+
def complete(text, status):
results = [x for x in friends if x.startswith(text)] + [None]
return results[status]
@@ -90,13 +93,13 @@ if __name__ == "__main__":
# get twitter friends Replies
print '\twassr replies\t'
for data in reversed(wassr.getReplies()):
- print '%-12s : %s' % (data['user_login_id'] ,data['text'])
+ print _T('%-12s : %s' % (data['user_login_id'] ,data['text']))
friends.add(data['user_login_id'])
# get twitter friends Replies
print '\n\twassr replies\t'
for data in reversed(twitter.GetReplies()):
- print '%-12s : %s' % (data.GetUser().GetScreenName() ,data.GetText())
+ print _T('%-12s : %s' % (data.GetUser().GetScreenName() ,data.GetText()))
friends.add(data.GetUser().GetScreenName())
return 0
@@ -105,7 +108,7 @@ if __name__ == "__main__":
# Get FriendsTimeLine
print ' ----- wassr Friends Time Line -----'
for data in reversed(wassr. getTimeline()):
- print "%-12s: %s" % (data['user_login_id'] ,data['text'])
+ print _T("%-12s: %s" % (data['user_login_id'] ,data['text']))
twit = "wr[]%-12s: %s" % (data['user_login_id'] ,data['text'])
if twit in friendsTimeLine:
pass
@@ -114,7 +117,7 @@ if __name__ == "__main__":
friendsTimeLine.append(twit)
print '\n ----- twitter Friends Time Line -----'
for data in reversed(twitter.GetFriendsTimeline()):
- print '%-12s : %s' % (data.GetUser().GetScreenName() ,data.GetText())
+ print _T('%-12s : %s' % (data.GetUser().GetScreenName() ,data.GetText()))
# append log
twit = "tw[%s]%-12s: %s" % (data.GetCreatedAt(), data.GetUser().GetScreenName(), data.GetText())
if twit in friendsTimeLine:
@@ -127,7 +130,8 @@ if __name__ == "__main__":
prompt = '\n cmd: Friendstimeline[f] eXit[xx] \n> '
while True:
- input = raw_input(prompt).split(" ")
+ print prompt,
+ input = sys.stdin.readline().decode('mbcs').encode('utf-8').strip().split(" ")
if input[0] != '':
if len(input) == 1:
if len(input[0]) > 2:
Macで動かなかったら御免なさい。このブログを応援する