ブログを移行しました。

これまでTumblr本来の使い方を無視して(?)、ここに記事を書いてきましたが。

こないだ、以下に移行しました。

▼madroom project
http://madroom-project.blogspot.com/

Twitterとの連携とかまだやってないので。
近々やらなくちゃね。

今年中にはやろう。。。



P.S.
クリッピング用の方にはぽつぽつpost継続すると思います。

▼mamor’s MEMO
http://mamor-memo.tumblr.com/

Facebook Android SDKで認証してPostする際のポイント

DroidNPをFacebookに対応させました。
その際のハマりポイントをメモしておきます。
要は、Facebook Android SDKで認証してPostする際のポイントです。
かなり雑な内容ですが。。。



■Facebook Android SDKのDLとimport
https://github.com/facebook/facebook-android-sdk
からDL。
"facebook"ディレクトリをeclipseでimport。
自分のプロジェクトを右クリック。
properties > Android > Library > Add...
にてimportしたプロジェクト(デフォルトだと"com_facebook_android")を選択。OKを押す。



■認証で使用したメソッド
--
com.facebook.android.Facebook.authorize(
	Activity activity,
	String[] permissions,
	int activityCode,
	DialogListener listener)
--

* activity
Contextをキャストしても良いっぽい。
(XxxActivity)getContext()みたいな感じ。

* permissions
"offline_access"と"publish_stream"を指定。
offline_accessは認証tokenの期限切れを防ぐ為。
publish_streamはウォールへの書き込み権限。

* activityCode
startActivityForResultに渡すrequestCodeのようなもの。後述。

* listener
後述。



■認証後の処理
(A) Facebook公式アプリが端末にインストールされている場合
onActivityResultに戻るので、前述のactivityCode == requestCodeの時に専用の処理を書く。

--Java(onActivityResultにて)--
switch (requestCode) {
case REQUEST_CODE_FACEBOOK_OAUTH:
	String token = data.getExtras().getString(Facebook.TOKEN);
	// TODO: tokenの保存等。
	break;
default:
	break;

}
--


(B) Facebook公式アプリが端末にインストールされていない場合

--Java(Facebook.DialogListener)--
@Override
public void onFacebookError(FacebookError e) {
	// TODO:
}

@Override
public void onError(DialogError e) {
	// TODO:
}

@Override
public void onComplete(Bundle values) {
	String token = values.getString(Facebook.TOKEN);
	// TODO: tokenの保存等。
}

@Override
public void onCancel() {
	// TODO:
}
--



■認証サンプルソース
--Java--
Facebook facebook = new Facebook("[Facebookで登録したアプリのID]");
facebook.authorize(
		(XxxActivity)getContext(),
		new String[] {"offline_access","publish_stream"},
		1,
		new Facebook.DialogListener() {
	@Override
	public void onFacebookError(FacebookError e) {
		// TODO:
	}

	@Override
	public void onError(DialogError e) {
		// TODO:
	}

	@Override
	public void onComplete(Bundle values) {
		String token = values.getString(Facebook.TOKEN);
		// TODO: tokenの保存等。onActivityResultも忘れずに。(この場合、requestCodeは1。)
	}

	@Override
	public void onCancel() {
		// TODO:
	}
});
--



■認証後のサンプル
--Java--
private void setFacebookSettings(String token){
	Facebook facebook = new Facebook("[Facebookで登録したアプリのID]");
	facebook.setAccessToken(token);

	try {
		String response = facebook.request("me");
		JSONObject json;
		try {
			json = new JSONObject(response);
			String name = json.get("name").toString();
			String id = json.get("id").toString();

			// TODO: nameやidをSharedPreferencesに保存する。等。
		} catch (JSONException e) {
			// TODO:
		}
	} catch (MalformedURLException e) {
		// TODO:
	} catch (IOException e) {
		// TODO:
	}
}
--



■その他
Facebook側の話。
Android Marketでの公開を前提としている場合、開発用のkey hash登録と併せて
Android Market用のAPK作成時に使用するkeystoreでのkey hash作成/登録も忘れずに。

LaunchpadでBazaarメモ。

Launchpadにbranchを作成、Aptana StudioからBzrEclipseで操作する。
Aptanaのworkspaceにgit設定をしておくとTerminalからbzrコマンド入力可能。(要、Bazaarのインストール。)
BzrEclipseが良くわからないエラーを吐いても、Terminalからだと正常にpush出来たりした。
BzrEclipseとTerminalを併用しようと思います。

以下、手順。(細かいことは割愛で。)

(1)
https://launchpad.net/
でアカウント登録。

(2)
右上のアカウント名をクリック。
Overview > SSH keys で公開鍵登録。
Code > Register a branch でブランチ作成。
Code > 作成されたブランチを選択。
pushは”Update this branch”のコマンドは要、メモ。

(3)
eclipseで
New > Project > Bazaar Branch as new Project
“Initialize a new branch location”を選択。
Branch LocationにLaunchpadのURLを入力。

例:
http://bazaar.launchpad.net/~[USERNAME]/+junk/[BRANCHNAME]/

(3)
ローカル側で予め
bzr launchpad-login [USERNAME]
をするのを忘れずに。

参考:
http://aru-and-dhi.blogspot.com/2009/06/launchpad.html
http://hylom.net/2009/01/16/090115-launchpad/



プロジェクトを複数作成して、一人複数人役で色々と実験してみる。

Notepad++の設定メモ

自分的に必要な設定を、随時ここに書き足していきます。


Settings > Preferences > General
Show close button on each tab にチェック

Settings > Preferences > New Document/Default Directory > Encoding
UTF-8 を選択

chmファイルのエラー対処メモ

chmファイルを右クリック > プロパティ > ブロックの解除 > OK

参考
http://www.nishishi.com/blog/2009/06/chm_help_tips.html

VMWare + Ubuntu + Apache2 にSubversionインストールメモ

とりあえずローカル環境なのでセキュリティ関係とか細かい事は後々。

▼Subversionのインストール
sudo apt-get install subversion subversion-tools libapache2-svn

▼設定の編集
(1)
一応バックアップ。
sudo cp dav_svn.conf dav_svn.conf.org

(2)
/etc/apache2/mods-enabled/dav_svn.conf の末尾に追記↓

<location /svn>
  DAV svn
  SVNParentPath “/home/[USERNAME]/svn”
</location>


(3)
Apache2再起動。

▼レポジトリ保存用のフォルダ作成
mkdir ~/svn/
svnadmin create ~/svn/main

▼権限設定
sudo chown -R www-data.www-data ~/svn/main

▼確認
http://[DOMAIN]/svn/main/
eclipseからも、このURLに繋がりました。

▼参考
UbuntuにSubversionを入れてバージョン管理でもしてみる
http://blog.riywo.com/2008/04/01/054421

VMware + Ubuntu メモ
http://mamor-blog.tumblr.com/post/9420281438/vmware-ubuntu

VMWare + Ubuntu にApache2インストールメモ
http://mamor-blog.tumblr.com/post/9994864440/vmware-ubuntu-apache2

VMWare + Ubuntu にApache2インストールメモ

▼Apache2のインストール
sudo apt-get install apache2
再起動
http://localhost/ にアクセスして”It works!”と表示されたら成功。

参考↓
http://dqn.sakusakutto.jp/2008/08/ubuntu-804apache2.html

“E: Couldn’t find package apache2” のエラーが出たら↓を参考に。
VMWare + Ubuntuのインストールも↓を参考に。
http://mamor-blog.tumblr.com/post/9420281438/vmware-ubuntu

▼コマンドメモ
sudo /etc/init.d/apache2 start
sudo /etc/init.d/apache2 stop
sudo /etc/init.d/apache2 restart
sudo /etc/init.d/apache2 reload (gracefulのことらしい??)
sudo /etc/init.d/apache2 status

参考↓
https://forums.ubuntulinux.jp/viewtopic.php?id=5348

CodeIgniterのダウンロードURL

wgetする時用にメモ。
ttp://codeigniter.com/download_files/reactor/CodeIgniter_[VERSION].zip

PHPでLast.fm APIを使用する際、Last.fmへのアクセスを省く

メモ的に。

昨夜のエントリの続きです。
http://mamor-blog.tumblr.com/post/9629082639/php-last-fm-api

例えば自分のWEBサイトでLast.fmの情報を表示したい。
となった場合、その都度Last.fmにアクセスしているとレスポンス速度の問題が生じます。
(一応、キャッシング機能もあるようですが。)

なので、Last.fmの情報はcronで定期的に取得。XMLをローカルに保存しておくとします。
以下のURLのe.g.と付いているリンクのような感じでアクセスしてレスポンスを丸ごと保存する感じです。
http://www.lastfm.jp/api/show?service=300

User::getTopArtistsを用いてしまうと内部でLast.fmにアクセスしてしまうので
User::getTopArtistsの内部で行っている処理を抜き出します。

--【PHP】--
$response = new SimpleXMLElement(file_get_contents('user_get_top_artists.xml'));
$xml = $response->children()->{0};
$artists = array();
foreach($xml->children() as $artist){
	$artists[] = Artist::fromSimpleXMLElement($artist);
}
print_r($artists);
--

これでOKです。
user_get_top_artists.xmlが、予め保存したXMLを指します。

PHPでLast.fm APIを使用する

Last.fmはAPIが充実しています。(日本ではあまり縁が無いかもしれませんが。)
http://www.lastfm.jp/api
INとOUTはTwitter APIのような感じです。(レスポンスのフォーマットはXMLのみのようです。)

で、PHPでLast.fmのAPIを扱いたい。
というワケで、探しました。

まだ大した内容は書けませんが、user.getTopArtistsのサンプル作成までは出来ました。
以下、メモ。

* PHP last.fm API
https://github.com/fxb/php-last.fm-api
本家(とその関係の方)の提供なのか。までは調べていませんが、パッと見、一通り揃っていそうです。

* wiki - TOP
http://sourceforge.net/apps/mediawiki/phplastfmapi/index.php?title=Main_Page

* wiki - Usage(情報が古い??)
http://sourceforge.net/apps/mediawiki/phplastfmapi/index.php?title=Usage

* wiki  - Method Reference(情報が古い??)
http://sourceforge.net/apps/mediawiki/phplastfmapi/index.php?title=Method_Reference

* その他参考(というかここが一番助かった。。。)
http://www.davidgebhardt.de/2010/07/nutzen-der-lastfm-api-mit-php-via-php-last-fm-api/

* user.getTopArtistsのサンプル
http://www.lastfm.jp/api/show?service=300

--【PHP】--
<?php
require_once('./src/lastfm.api.php');

$caller = new CallerFactory();
$curlCaller = $caller->getCurlCaller();
$curlCaller->setApiKey('YOUR_API_KEY');
$artists = User::getTopArtists('username', '7day');
print_r($artists);
--

P.S.
JavaでLast.fmのAPIを扱う場合
https://github.com/c99koder/lastfm-android
が参考になります。(Android公式アプリのソースです。)

About Me

【description】

mamorのブログです。
自分の記事を書きます。
フォローはこのブログからはできません。

【internal link】

【external link】

【search by Google】

【Twitter】

【tag】