Amazon

2012年9月30日日曜日

Facebook Graph APIで写真が属しているアルバムIDを取得する

FacebookのiPhoneアプリのように、画像を表示して画面をスイープしたら次の画像を取得する方法を探している。


アルバムのIDリストを取得するには以下の通り
https://graph.facebook.com/*my_id*/albums?access_token=*access_token*
さらにアルバムのIDが決まればそこに含まれる写真のIDリストは以下で取れるようです。
https://graph.facebook.com/*album_id*/photos?access_token=*access_token*
が、ある写真がどのアルバムに属するかはわからないので、それを調べたい。


そこで考えた方法は
表示した画像のIDを取得して、その画像が属するAlbum IDを取得。
ただ、Graph APIでは取れなさそうで、FQLを使う様子




ドキュメントはこちら
http://developers.facebook.com/docs/reference/fql/photo/

参考FQLはこちら
select aid, album_object_id from photo where object_id = ${GRAPH_PHOTO_ID}

うーん、めんどくさい。。。

2012年9月17日月曜日

facebookErrDomain error 10000.

Titaniumを使ってFacebookのpostアプリを作る時にハマった事。

以下のようなメソッドとパラメーターを入れてPostするが、

Ti.Facebook.requestWithGraphPath(url, parameters, "POST"function(e) {...}


The operation couldn't be completed. (facebookErrDomain error 10000.)

という結果が返って来た。

urlをよく確認すると'me/home'になっていた。'me/home'はフィードを読み込むためのものであり、GETするもの。
'me/feed'は自分が投稿したものを得るのであり、POSTするもの。

この小さな違いに少しハマりました。

各Webサービスの認証のTitanium Code

Titaniumで開発する際、様々なサービスと連携する事になると思いますが、
その際、各サービスとの認証を毎回実装しているとめんどくさいので、
まとめられてるAPIはないものかと探していたら、ありました。
https://github.com/k0sukey/TiPlatformConnect

参照元
http://www.moongift.jp/2012/04/20120413-2/

2012年9月2日日曜日

TitaniumでTitleControlに枠なしのボタンを複数付ける方法

Titaniumを使って、Facebookアプリ風にTitleControlに複数のボタンを枠なしで表示したい。

枠ありでよければ、TabbedBarにbuttonの配列を作って、setTitleControlする方法がTitanium Mobileのマニュアルに方法が書いてあるが、枠なしにする方法が見当たらない。

どなたか方法知りませんか?



2012年7月29日日曜日

Facebook Graph APIでaccess_tokenを延期する方法

通常のFacebookの認証だと1,2時間で認証が切れてしまうので、それを延ばすための方法。

こちらより自分のapp_id, app_secretを取得
https://developers.facebook.com/apps

さらにアプリのSetting -> AdvancedでRemove offline_access permissionをenableにする必要がある

access_tokenを更新するためのリクエスト方法は以下。公式ドキュメントはこちら

https://graph.facebook.com/oauth/access_token?             
    client_id=APP_ID&
    client_secret=APP_SECRET&
    grant_type=fb_exchange_token&
    fb_exchange_token=EXISTING_ACCESS_TOKEN 

TitaniumでEXISTING_ACCESS_TOKENは
http://docs.appcelerator.com/titanium/2.1/index.html#!/api/Titanium.Facebook

Ti.Facebook.accessTokenでアクセスできるみたい。
authorize()後にアクセスすると取得可能になるみたい。
ちなみにTi.Facebook.appidもいける。

もしくはgetAccessToken()かgetAppid()でも良い。
あとは()でリクエストすることになるのかな。

2012年7月7日土曜日

Titaniumであらかじめ用意されているiPhoneアプリのボタン一覧Titanium.UI.iPhone.SystemButton

2012年6月16日土曜日

Titaniumのバージョンを上げたらエラー

TitaniumのSDKのバージョンを1.8.2に上げたところ
これまで動いていたKitchen Sinkを動かそうとしたところ以下のエラーがでてしまった。


[ERROR] xcodebuild: error: The project 'Kitchen Sink.xcodeproj' does not contain a target named 'KitchenSink-universal'.
[ERROR] 
[ERROR] Error: Traceback (most recent call last):
  File "/Users/shingo/Library/Application Support/Titanium/mobilesdk/osx/1.8.0.1/iphone/builder.py", line 1274, in main
    execute_xcode("iphonesimulator%s" % link_version,["GCC_PREPROCESSOR_DEFINITIONS=__LOG__ID__=%s DEPLOYTYPE=development TI_DEVELOPMENT=1 DEBUG=1 TI_VERSION=%s %s %s" % (log_id,sdk_version,debugstr,kroll_coverage)],False)
  File "/Users/shingo/Library/Application Support/Titanium/mobilesdk/osx/1.8.0.1/iphone/builder.py", line 1180, in execute_xcode
    output = run.run(args,False,False,o)
  File "/Users/shingo/Library/Application Support/Titanium/mobilesdk/osx/1.8.0.1/iphone/run.py", line 39, in run
    sys.exit(rc)
SystemExit: 65


そんなわけで、project -> cleanで解決

Titaniumで使用できるモジュール一覧

Titaniumでグラフを描写

Titaniumでグラフを書く際の実現方法は2つ

1. Titaniumのグラフモジュールを使う
- Titanium Plus+ Charts Module Plus (有料)
使用にあたってはModuleの月額使用料を払う必要がある

- PrettyChartSample (無料)
[使い方]
http://gndo.blogspot.jp/2011/12/titanium-advent-calendar-201122module.html

2. WebViewでjQueryやPrototype.jsのグラフモジュールを使う
JavaScriptのグラフモジュールはこちらを参照

Titaniumで使えるCalendarモジュール

Titaniumで自分のアプリ用のカレンダーを作りたい場合に使えそうなモジュール

Appcelerator-Calendar-Module
http://www.mountposition.co.jp/blog/?p=227

AGCalendar

https://github.com/Appgutta/AGCalendar
[document]
https://github.com/Appgutta/AGCalendar/blob/master/documentation/index.md

- 頑張って書いてみる
http://qiita.com/items/1398

var win = Ti.UI.currentWindow;

//今日という日
var now = new Date();
now.setHours(12);
var Y = now.getYear()+1900;
var M = now.getMonth()+1;

//表示している画面の年と月
var whenLabel = Ti.UI.createLabel({
    font:{
        fontFamily:'Helvetica Neue',
        fontSize:25
    },
    textAlign:'center',
    text:Y+"年"+M+"月",
    top:5, left:'auto', height:25, width:'auto'
});
win.add(whenLabel);

//月を戻すボタン
var backMonthButton = Ti.UI.createLabel({
    backgroundColor:"green",
    top:35, left:30, height:25, width:120,
    textAlign:'center',
    text:'back'
});
backMonthButton.addEventListener('click', function(){
    var date = new Date(Y,parseInt(M)-1-1)
    var Y_ = date.getYear()+1900;
    var M_ = date.getMonth()+1;
    whenLabel.text = Y_+"年"+M_+"月";
    cal(date);
});
win.add(backMonthButton);

//月を進めるボタン
var forwardMonthButton = Ti.UI.createLabel({
    backgroundColor:"green",
    top:35, left:170, height:25, width:120,
    textAlign:'center',
    text:'forward'
});
forwardMonthButton.addEventListener('click', function(){
    var date = new Date(Y,parseInt(M)-1+1)
    var Y_ = date.getYear()+1900;
    var M_ = date.getMonth()+1;
    whenLabel.text = Y_+"年"+M_+"月";
    cal(date);
});
win.add(forwardMonthButton);

//ここにカレンダーの各日付を表示。スクロールさせる。
var scrollView = Titanium.UI.createScrollView({
    contentWidth:'auto',
    contentHeight:'auto',
    top:70,
    height:300,
    width:320,
    backgroundColor:'#fff'
});
win.add(scrollView);

//カレンダー表示関数
var cal = function(date){
    var year = date.getFullYear();
    var month = date.getMonth();

    var leap_year=false;
    if ((year%4 == 0 && year%100 != 0) || (year%400 == 0)) leap_year=true;
    var lom = new Array(31,28+leap_year,31,30,31,30,31,31,30,31,30,31);
    var w = new Array("red","gray","gray","gray","gray","gray","blue"); //曜日の見分けは色のみ
    var days=0;
    for (var i=0; i < month; i++) days+=lom[i];
    var week=Math.floor((year*365.2425+days)%7); //その月の開始曜日を取得
    var cols = 0;
    var rows = 0;
    var width = 80;
    var height = 80;
    for(var i=0; i<lom[month]; i++){
        var top = 0 + height * rows;  //各日付の表示位置制御
        var left = 0 + width * cols;
        var calLabel = Ti.UI.createLabel({
            backgroundColor:w[week],
            borderColor:"black",
            top:top, left:left, height:height, width:width
        });
        scrollView.add(calLabel);
        var dayLabel = Ti.UI.createLabel({
            color:'white',
            font:{fontSize:20},
            width:'auto',
            textAlign:'center',
            height:'auto',
            text:i+1
        });
        calLabel.add(dayLabel);
        if(cols != 3){  //各日付は横4列まで
            cols++;
        } else {
            cols = 0;
            rows++;
        }
        if(week != 6){
            week++;
        } else {
            week = 0;
        }
    }
}

cal(now);

Amazon3