Firefoxに乗り換え中 / @freedを解約 / auのPC向けデータ定額プランを契約 / Win32のC++でXML-RPC通信してブログの最新記事を取得する
投稿日: 2008年01月02日 更新日: 2017年07月22日
Firefoxに乗り換え中
これでもう何度目かの乗り換え。
今回の理由は「Googleツールバーが原因でIE7が落ちる、もしくは不安定になる」という至極消極的なもの。
症状としては下記がドンピシャ。
IE7ツールバー検索窓日本語入力でフリーズで落ちる - 問題の報告|Googleグループ
IEが不安定になる=シェルが不安定になるわけで、結構クリティカル。今までもそうだったんだけど、最近特に顕著なので我慢の限界。かといってGoogleツールバーは便利なので手放せない。
数あるブラウザからFirefoxを選択した理由は「Googleツールバーを公式にサポートしてる」から。IE(Tridentエンジン)搭載のSleipnirやLunascapeにしなかった理由はGoogleツールバーがないから。
さし当たって導入したアドオンは「IE Tab」。
@freedを解約
12月22日にdocomoの@freedを解約した。
- 2003年4月のサービス開始
- 2003年?月契約
- 2007年12月解約
というわけで丸4年以上お世話になっていたことになる。僕のトラベルライフに多大な恩恵を与えてくれた同サービスに感謝。
今後はauの「WINシングル定額」で移動データ通信を行います。
auのPC向けデータ定額プランを契約
@freedを解約すると同時に契約。正式名は「WINシングル定額」。
「上り最大1.8Mbps/下り最大3.1Mbps」の謳い文句通り、@freedより遥かに速い。
お約束のスピードテストの結果。
ブロードバンドスピードテスト 通信速度測定結果
http://www.bspeedtest.jp/ v3.0.0
測定時刻 2007/12/25 16:13:09
回線種類/線路長/OS:モバイル回線/-/Windows XP/-
サービス/ISP:-/-
サーバ1[N] 866kbps
サーバ2[S] 471kbps
下り受信速度: 860kbps(866kbps,108kByte/s)
上り送信速度: 400kbps(404kbps,50kByte/s)
基本的に@freedの64kbpsでもさほど支障なかった自分としてはオーバースペックと言えるほどのスピード。
Win32のC++でXML-RPC通信してブログの最新記事を取得する
ざくっと作ってみた。HTTP通信はWinHTTPを利用。エラーチェックはお情け程度に。ソースはつぎはぎなので変なところがあったら指摘ください。
ビルド環境
- 最新のWindows SDK
- Visual Studio 2005 SP1
- MFC/ATLヘッダをインクルードするコンソールプロジェクト
実行環境
- Windows XP SP2
- tDiaryのXML-RPCプラグイン
うまくいけばC:\response.xmlに結果が格納されます。
レスポンスのXMLをパースするのはexpatでも使えば楽だと思う。
#include "stdafx.h"
#include "getRecentPosts.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#endif
#pragma comment(lib, "winhttp.lib")
#include <Winhttp.h>
int getRecentPosts()
{
CString url = _T("http://www.example.com/diary/xmlrpc.rb");
URL_COMPONENTS url_components = {sizeof(URL_COMPONENTS)};
url_components.dwSchemeLength = -1;
url_components.dwHostNameLength = -1;
url_components.dwUrlPathLength = -1;
url_components.dwExtraInfoLength = -1;
::WinHttpCrackUrl(url, url.GetLength(), 0, &url_components);
// Use WinHttpOpen to obtain a session handle.
HINTERNET hSession = ::WinHttpOpen(L"Win32 XML-RPC Client TEST/1.0",
WINHTTP_ACCESS_TYPE_DEFAULT_PROXY,
WINHTTP_NO_PROXY_NAME,
WINHTTP_NO_PROXY_BYPASS,
0);
if(!hSession){
return 0;
}
CString host(url_components.lpszHostName, url_components.dwHostNameLength);
HINTERNET hConnect = ::WinHttpConnect(hSession, host, INTERNET_DEFAULT_HTTP_PORT, 0);
if(!hConnect){
return 0;
}
HINTERNET hRequest = ::WinHttpOpenRequest(hConnect,
L"POST",
url_components.lpszUrlPath,
NULL,
WINHTTP_NO_REFERER,
WINHTTP_DEFAULT_ACCEPT_TYPES,
0);
// Send a request.
if(!hRequest){
return 0;
}
static LPCTSTR request_xml_tmpl =
_T("<?xml version=\"1.0\"?>")
_T("<methodCall>")
_T("<methodName>%s</methodName>")
_T("<params>")
_T("<param><value><string>%s</string></value></param>")
_T("<param><value><string>%s</string></value></param>")
_T("<param><value><string>%s</string></value></param>")
_T("<param><value><int>%d</int></value></param>")
_T("</params>")
_T("</methodCall>");
CString request_xml;
request_xml.Format(request_xml_tmpl,
_T("metaWeblog.getRecentPosts"),
_T("blogid"),
_T("username"),
_T("password"),
10);
CT2A request_xml_ascii(request_xml);
LPCSTR postdata = request_xml_ascii;
BOOL bResults = ::WinHttpSendRequest(hRequest,
L"Content-Type: text/xml", 0,
(LPVOID)postdata,
(DWORD)(strlen(postdata) * sizeof(char)),
(DWORD)(strlen(postdata) * sizeof(char)),
(DWORD_PTR)WinHttpSetStatusCallback);
if(bResults == FALSE){
DWORD error = GetLastError();
// ERROR_WINHTTP_CANNOT_CONNECT
if(error = ERROR_WINHTTP_RESEND_REQUEST){
}
return 0;
}
if(bResults){
bResults = WinHttpReceiveResponse(hRequest, NULL);
}
DWORD dwSize = 0;
if(!bResults){
return 0;
}
FILE* fp = fopen("c:\\response.xml", "w");
do{
// Check for available data.
if(!::WinHttpQueryDataAvailable(hRequest, &dwSize)){
printf("Error %u in WinHttpQueryDataAvailable.\n", GetLastError());
DWORD error = GetLastError();
if(error == ERROR_WINHTTP_RESEND_REQUEST){
}
return 0;
}
// Allocate space for the buffer.
LPSTR pszOutBuffer = new char[dwSize + 1];
if(!pszOutBuffer){
ATLTRACE("Out of memory\n");
dwSize = 0;
}else{
// Read the data.
::ZeroMemory(pszOutBuffer, dwSize + 1);
DWORD dwDownloaded = 0;
if(!::WinHttpReadData(hRequest, (LPVOID)pszOutBuffer, dwSize, &dwDownloaded)){
ATLTRACE("Error %u in WinHttpReadData.\n", GetLastError());
}else{
ATLTRACE("%s", pszOutBuffer);
fwrite(pszOutBuffer, sizeof(char), strlen(pszOutBuffer), fp);
}
// Free the memory allocated to the buffer.
delete [] pszOutBuffer;
}
} while( dwSize > 0 );
fclose(fp);
if(hRequest){
::WinHttpCloseHandle(hRequest);
}
if(hConnect){
::WinHttpCloseHandle(hConnect);
}
if(hSession){
::WinHttpCloseHandle(hSession);
}
return 0;
}
CWinApp theApp;
using namespace std;
int _tmain(int argc, TCHAR* argv[], TCHAR* envp[])
{
int nRetCode = 0;
if (!AfxWinInit(::GetModuleHandle(NULL), NULL, ::GetCommandLine(), 0))
{
_tprintf(_T("致命的なエラー: MFC の初期化ができませんでした。\n"));
nRetCode = 1;
}
else
{
// TODO: アプリケーションの動作を記述するコードをここに挿入してください。
}
getRecentPosts();
return nRetCode;
}
名前:宮内 はじめ
Code for Nagoya名誉代表
E2D3名古屋支部長
プログラマーです。GISやデータビズが好きです。このサイトは宮内の個人的なメモです。