Android 系統上面 facebook 和 foursquare 重新loading 分析

六月 23rd, 2011 by edadmin View Comments »

最近要做一個 android app,需要定義何時自動更新 app顯示的資訊。所以研究了 facebook 和 foursquare app 在這方面的表現,結果如下:

android_loading

由上面的結果來看,有  onCreate() 就會被驅動 loading。

另外,由於先前做自己的 app 螢幕轉向時會觸發 onCreate(),如果user 一直做螢幕轉向會造成程式一直重新loading。Google 一下後發現有一些解決的辦法,就是:

1.修改AndroidManifest.xml,在對應activity增加參數:

<activity android:name="SoftWare" android:configChanges="orientation|keyboardHidden"></activity>

2.在主要的 activity 中加入onConfigurationChanged方法,如果需要針對螢幕轉向時做其他處理,也可以在這裡處理:

@Override

public void onConfigurationChanged(Configuration newConfig) {

super.onConfigurationChanged(newConfig);

/*

if (this.getResources().getConfiguration().orientation == Configuration.ORIENTATION_LANDSCAPE) {

} else if (this.getResources().getConfiguration().orientation == Configuration.ORIENTATION_PORTRAIT) {

}

*/

}

參考資料

Android source code 下載並結合 Eclipse

六月 11th, 2011 by edadmin View Comments »
由於Android SDK並沒有內建 source code,所以每次要看原始碼都很麻煩。於是,上網找了些資料,並整理出來供大家參考。
由於安裝 Android code 必須使用 Git,如果沒有的朋友必須先安裝Git。
在Git的環境下,切換到你安裝Android sdk的目錄夾下,並下以下的命令:
$ mkdir sources
$ cd sources
$ git clone git://android.git.kernel.org/platform/frameworks/base.git
這樣變開始下載 source code,下載需要一些時間。
下載完成後,接著就要將 source code 和 Eclipse結合:
請在Eclipse上先開啓任何一個專案,並找到 android.jar(如下圖),對android.jar 點選滑鼠右鍵後選擇Properties,接著選擇 Java Source Attachment。接下來選擇 External Folder 並指向路徑 android_sdk/sources/base/code/java ,然後點選"Apply"和"OK"即可。

source_code

利用 windows 7 工作排程 (crontab) 定時開啟網頁

一月 7th, 2011 by edadmin View Comments »

在 windows 7 下要定時開啟網頁的方法很簡單。

只要先建立一個bat檔案,內容如下

yahoo.bat
===========================================
cd C:\Program Files\Internet Explorer\
iexplore "http://tw.yahoo.com/"
===========================================

接下來做設定,設定的方式如下:

1.開啟工作排程器: 開始>>所有程式>>附屬應用程式>>系統工具>>工作排程器

2.建立工作

3.設定動作-剛剛的yahoo.bat

4.設定處發程序-要執行的時間

利用 Google Chart API 產生各種統計圖

十二月 9th, 2010 by edadmin View Comments »

利用 Google Chart API 來產生各種統計的圖表,只要利用 Google 訂出的網址格式產生出自己想要的圖檔網址,Google 就會回傳一個圖檔,相當容易使用。

以下為幾個簡單的範例及 Google 回傳的圖檔:

http://chart.apis.google.com/chart?cht=p3&chd=t:60,40&chs=250×100&chl=Hello|World

http://chart.apis.google.com/chart?cht=bvs&chd=t:49,48,3&chs=350×120&chl=%E4%B8%8D%E5%8F%8A%E6%A0%BC|%E5%8F%8A%E6%A0%BC|%E6%BB%BF%E5%88%86

http://chart.apis.google.com/chart?cht=lc&chd=t:0,20,20,50,40,70,70,90,85,45,40,50&chs=320×120&chl=11/19|11/20|11/21|11/22

http://chart.apis.google.com/chart?cht=lc&chd=t:0,20,20,50,40,70,70,90,85,45,40,50&chs=320×120&chxt=x,y&chxl=0:|Jan|Feb|March|April|May|1:|Min|Mid|Max

http://chart.apis.google.com/chart?cht=lc&chd=t:0,20,20,50,40,70,70,90,85,45,40,50&chm=o,0066FF,0,-.5,6&chs=320×120&chxt=x,y&chxl=0:|Jan|Feb|March|April|May|1:|Min|Mid|Max

http://chart.apis.google.com/chart?cht=lc&chs=450×330&chd=t:7,18,11,26,22,11,14&chxr=1,0,30&chds=0,30&chco=4d89f9&chxt=x,y&chxl=0:|Mon|Tue|Wed|Thu|Fri|Sat|Sun&chls=3,1,0&chm=d,4d89f9,0,0,12,0|d,4d89f9,0,1,12,0|d,4d89f9,0,2,12,0|d,4d89f9,0,3,12,0|d,4d89f9,0,4,12,0|d,4d89f9,0,5,12,0|d,4d89f9,0,6,12,0&chg=0,6.67,5,5

折線圖的重要參數:

cht=<折線圖類型>可選擇lc或lxy

chs=<圖元寬度>x<圖元高度>

chd=t:<數值字串>    or    chd=s:<數值字串>

chxr=<坐標軸索引值>,<座標值起始值>,<座標值終止值>,<坐標值間隔大小>| … <坐標軸索引值>,<座標值起始值>,<座標值終止值>

chxl=<坐標軸索引值>:|<座標值 1>|<座標值 n>|  …   <坐標軸索引值>:|<座標值 1>|<座標值 n>

chls=<資料線 1 粗細>,<數據線 1 線段長度>,<數據線 1 線段間隔長度>|

chm=<形狀類型>,<顏色>,<資料組索引>,<資料點>,<尺寸>|

chg=<x 軸步長>,<y 軸步長>,<線段長度>,<線段間隔長度>

chxs=<坐標軸索引值>,<顏色>,<字型大小>,<對齊方式>|

*軸步長計算方法: 100/最大值 * 間隔量  >>以上一個圖例的計算為: 100/30*2=6.6666…

.

當然除了上述的範例外,Google Chart API 還提供了其他的圖形格式,請上 Google Chart API 參考。

補充: 有個不錯的部落格有中文的介紹 (推) >> http://blog.xuite.net/jackhsu0704/gmns/15105929

參考資料1參考資料2

.

利用 cPanel 的工作排程(cron) 定時觸發事件

十二月 6th, 2010 by edadmin View Comments »

利用 cPanel的工作排程(cron)來定時觸發事件。

一、在設定 cPanel 之前,先做好一個需要觸發的檔案。這裡假設需要觸發的檔案為 getdata.php。

二、到 cPanel 的主頁,點選工作排程(如圖)。

三、按照下圖的設定順序,分別設定好: 需要通知的 email、觸發時間(初期可以設定每分鐘,以方便測試)、執行的指令(注1)、新增工作排程。

四、確認是否正確觸發。

注意事項:

1.有關第三步驟中執行指令的設定有兩點需要注意: a.需要寫入待觸發檔案的絕對位置,例如: /home/*****/public_html/application/getdata.php。b.為了偵錯方便請將執行的指令更改成 "php 待觸發檔案的絕對位置 swordfish=mypass ",也就是"php /home/*****/public_html/application/getdata.php swordfish=mypass"。這樣寫,如果觸發有問題的話,會把原因 mail 到剛剛設定的 mail address,方便偵錯。

利用 Google Analytics API 抓取資料-PHP

十二月 2nd, 2010 by edadmin View Comments »

利用 Google Analytics API 抓取資料-PHP

<?php
// include the Google Analytics PHP class
include "googleanalytics.class.php";
try {
	// create an instance of the GoogleAnalytics class using your own Google {email} and {password}
	$ga = new GoogleAnalytics('email','密碼');

	// set Google Analytics ID - 格式為 'ga:123456';
	$ga->setProfile('google analytics ID');

	// set the date range we want for the report - format is YYYY-MM-DD
	$ga->setDateRange('2010-11-29','2010-12-01');

	// get the report for date and country filtered by Australia, showing pageviews and visits
	$report = $ga->getReport(
		array('dimensions'=>urlencode('ga:date,ga:country'),
			'metrics'=>urlencode('ga:pageviews,ga:visits'),
			'filters'=>urlencode('ga:country=@Taiwan'),
			'sort'=>'-ga:pageviews'
			)
		);

	//print out the $report array
	print_r($report);

} catch (Exception $e) {
	print '錯誤: ' . $e->getMessage();
}
?>

其中 Google Analytics ID 為網址中xxxxx的部份 >>

https://www.google.com/analytics/reporting/?reset=1&id=xxxxx&pdr=20101101-20101201

請於此下載需要呼叫的檔案: googleanalytics.class

參考資料

Google Map API for 地址轉經緯度

十一月 25th, 2010 by edadmin View Comments »

.

.

Google Map API for 地址轉經緯度

<?php

$arrcity2 = array();
$arrcity2[1] ='基隆市安樂區基金一路135巷11-1號2樓 ';
$arrcity2[2] ='基隆市暖暖區源遠路341之1號B1 ';
$length2 = count($arrcity2);//取總數
for ( $j=1 ; $j<=$length2 ; $j++ ) {
$arrcity3=urlencode($arrcity2[$j]);
$http="http://maps.google.com/maps/geo?q=".$arrcity3."&output=json"; //您想抓取的網址
$buffer = file($http); //將網址讀入buffer變數
sleep(1);
for($i=0;$i<sizeof($buffer);$i++) //將每段文字讀出來,以換行為單位,sizeof會傳回共有幾筆{
$n1=strpos(" ".$buffer[$i],"coordinates"); //檢查你要找的字,是否存在,假設我想找<title>中的內容為何,為什麼前面要加空白,因為如果找到位置如果是第一個位置是0,0跟找不到在判斷會有問題 
if($n1>0)  { 
$n12=strpos(" ".$buffer[$i],"["); 
$n13=strpos(" ".$buffer[$i],"]"); 
$title=substr($buffer[$i],$n12,$n13-$n12-1);  
$title3=iconv("UTF-8","big5",$arrcity2[$j]);  
echo $title3.",".$title."<br>\n"; //將title的內容值印出\n代表顯示原始碼的時候會換行,<BR>是brower顯示會換行 
}
}
}
?>

建立wordpress 固定網址

十一月 14th, 2010 by edadmin View Comments »

.

.

一般來說WordPress文章預設的網址型式是 http://xxx.com/?p=數字,這樣的網址對於搜尋引擎關鍵字查詢不利。

因此,我們可以更改成固定網址 –> http://xxx.com/2010/11/12/文章名稱/

.

更改固定網址的主要步驟有兩個:

一、在主機上面增加一個隱藏檔案 .htaccess。

  1. 新增一個空白的txt 檔案。
  2. 將檔案上傳到主機上面,這個檔案的位置必須和 wp-config.php相同。
  3. 將檔案名稱更改成 .htaccess (此檔案為預設隱藏檔案,因此要打開隱藏檔案瀏覽才看得到)。

二、設定 wordpress。

  1. 到wordpress 管理頁面,打開"設定" –> "固定網址"。
  2. 在一般選項中選擇想要的固定網址類型。
  3. 儲存變更。

.

補充說明:

* 有些免費的主機不提供 .htaccess 設定。

*如果沒有完成第一步驟就進行第二步驟,點選文章後會發現"找不到網頁"。

.

.

PHP Google Map API 反向地理編碼 (地址查閱)

九月 28th, 2010 by edadmin View Comments »

.

.

PHP Google Map API 反向地理編碼 (地址查閱)

<?php
$address_data=file_get_contents("http://maps.google.com/maps/api/geocode/json?latlng=$geolat,$geolong&sensor=false&language=zh-TW");
	            $json = json_decode($address_data,true);

$latitude = $json[results][0][address_components];
$count=0;
$statenum=0;
$sublocality=0;
foreach ($latitude as $value) {
    if($value[types][0]=='administrative_area_level_2'){//確認state 的位置
        $statenum=$count;
    }
    if($value[types][0]=='sublocality'){//確認里的位址
        $sublocality=$count;
    }
    $count++;
}

 if($json[results][0][types][0]=='street_address'){
			        $state = $json[results][0][address_components][$statenum][long_name];
			        $city = $json[results][0][address_components][$statenum-1][long_name];
			        if($sublocality <> 0){
			            $address = $json[results][0][address_components][$sublocality-1][long_name].$json[results][0][address_components][$sublocality-2][long_name].'號';
			        }else{
			            $address = $json[results][0][address_components][$statenum-2][long_name].$json[results][$statenum-3][address_components][0][long_name].'號';
			        }
}else{
			        $state = $json[results][0][address_components][$statenum][long_name];
			        $city = $json[results][0][address_components][$statenum-1][long_name];
			        if($sublocality <> 0){
			            $address = $json[results][0][address_components][$sublocality-1][long_name];
			        }else{
			            $address = $json[results][0][address_components][$statenum-2][long_name];
			        }
}
?>

參考資料: Google Geocoding API

.

.

使用新的 Facebook Graph API 來做 publish stream by JavaScript + PHP SDK

八月 11th, 2010 by edadmin View Comments »

.

.

最近正在研究使用新的 Facebook Graph API 來做 publish stream, 這次使用 JavaScript + PHP SDK 來完成.

第一步:請到 這裡 申請facebook 應用程式,並取得 應用程式 ID、API 金鑰、應用程式密鑰 等等資料(備用)。

第二步: 請到 這裡 下載 Facebook php sdk library,並將檔案儲存至伺服器上的 /facebook/ (請於根目錄下建立 facebook目錄夾供測試使用)。

第三步: 建立檔案 index.php, 並將下列程式複製存檔後儲存至伺服器上的 /facebook/。

第四步: 將 index.php 檔案中第4、5、6、9行的資料填入 -> 完成設定。

第五步: 請到自己的網址 http://xxx.xxx.xxx/facebook/index.php 即可測試 facebook Graph API 功能。

<?php

	//設定facebook 應用程式資訊
    $fbconfig['appid' ]  = "請填入應用程式 ID";
    $fbconfig['api'   ]  = "請填入API 金鑰";
    $fbconfig['secret']  = "請填入應用程式密鑰";

    //設定成自己的url
    $config['baseurl']  =   "http://xxx.xxx.xxx/facebook/index.php";

    try{
        include_once "facebook.php";
    }
    catch(Exception $o){
        echo '<pre>';
        print_r($o);
        echo '</pre>';
    }
    // Create our Application instance.
    $facebook = new Facebook(array(
      'appId'  => $fbconfig['appid'],
      'secret' => $fbconfig['secret'],
      'cookie' => true,
    ));

    // We may or may not have this data based on a $_GET or $_COOKIE based session.
    // If we get a session here, it means we found a correctly signed session using
    // the Application Secret only Facebook and the Application know. We dont know
    // if it is still valid until we make an API call using the session. A session
    // can become invalid if it has already expired (should not be getting the
    // session back in this case) or if the user logged out of Facebook.
    $session = $facebook->getSession();

    $fbme = null;
    // Session based graph API call.
    if ($session) {
      try {
        $uid = $facebook->getUser();
        $fbme = $facebook->api('/me');
      } catch (FacebookApiException $e) {
          d($e);
      }
    }

    function d($d){
        echo '<pre>';
        print_r($d);
        echo '</pre>';
    }
    //if user is logged in and session is valid.
    if ($fbme){
        //Retriving movies those are user like using graph api
        try{
            $movies = $facebook->api('/me/movies');
        }
        catch(Exception $o){
            d($o);
        }

        //Calling users.getinfo legacy api call example
        try{
            $param  =   array(
                'method'  => 'users.getinfo',
                'uids'    => $fbme['id'],
                'fields'  => 'name,current_location,profile_url',
                'callback'=> ''
            );
            $userInfo   =   $facebook->api($param);
        }
        catch(Exception $o){
            d($o);
        }

        //update user's status using graph api
        if (isset($_POST['tt'])){
            try {
                $statusUpdate = $facebook->api('/me/feed', 'post', array('message'=> $_POST['tt'], 'cb' => ''));
            } catch (FacebookApiException $e) {
                d($e);
            }
        }

        //fql query example using legacy method call and passing parameter
        try{
            //get user id
            $uid    = $facebook->getUser();
            //or you can use $uid = $fbme['id'];

            $fql    =   "select name, hometown_location, sex, pic_square from user where uid=" . $uid;
            $param  =   array(
                'method'    => 'fql.query',
                'query'     => $fql,
                'callback'  => ''
            );
            $fqlResult   =   $facebook->api($param);
        }
        catch(Exception $o){
            d($o);
        }
    }
?>
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml" xmlns:fb="http://www.facebook.com/2008/fbml">
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
        <title>PHP SDK & Graph API base FBConnect Tutorial | Thinkdiff.net</title>
    </head>
<body>
    <div id="fb-root"></div>
        <script type="text/javascript">
            window.fbAsyncInit = function() {
                FB.init({appId: '<?=$fbconfig['appid' ]?>', status: true, cookie: true, xfbml: true});

                /* All the events registered */
                FB.Event.subscribe('auth.login', function(response) {
                    // do something with response
                    login();
                });
                FB.Event.subscribe('auth.logout', function(response) {
                    // do something with response
                    logout();
                });
            };
            (function() {
                var e = document.createElement('script');
                e.type = 'text/javascript';
                e.src = document.location.protocol +
                    '//connect.facebook.net/en_US/all.js';
                e.async = true;
                document.getElementById('fb-root').appendChild(e);
            }());

            function login(){
                document.location.href = "<?=$config['baseurl']?>";
            }
            function logout(){
                document.location.href = "<?=$config['baseurl']?>";
            }
</script>
<style type="text/css">
    .box{
        margin: 5px;
        border: 1px solid #60729b;
        padding: 5px;
        width: 500px;
        height: 200px;
        overflow:auto;
        background-color: #e6ebf8;
    }
</style>

    <h3>PHP SDK & Graph API base FBConnect Tutorial | Thinkdiff.net</h3>
    <?php if (!$fbme) { ?>
        You've to login using FB Login Button to see api calling result.
    <?php } ?>
    <p>
        <fb:login-button autologoutlink="true" perms="email,user_birthday,status_update,publish_stream"></fb:login-button>
    </p>

    <!-- all time check if user session is valid or not -->
    <?php if ($fbme){ ?>
    <table border="0" cellspacing="3" cellpadding="3">
        <tr>
            <td>
                <!-- Data retrived from user profile are shown here -->
                <div class="box">
                    <b>User Information using Graph API</b>
                    <?php d($fbme); ?>
                </div>
            </td>
            <td>
                <div class="box">
                    <b>User likes these movies | using graph api</b>
                     <?php d($movies); ?>
                </div>
            </td>
        </tr>
        <tr>
            <td>
                <div class="box">
                    <b>User Information by Calling Legacy API method "users.getinfo"</b>
                    <?php d($userInfo); ?>
                </div>
            </td>
            <td>
                <div class="box">
                    <b>FQL Query Example by calling Legacy API method "fql.query"</b>
                    <?php d($fqlResult); ?>
                </div>
            </td>
        </tr>
    </table>
    <div class="box">
        <form name="" action="<?=$config['baseurl']?>" method="post">
            <label for="tt">Status update using Graph API</label>
            <br />
            <textarea id="tt" name="tt" cols="50" rows="5">Write your status here and click 'submit'</textarea>
            <br />
            <input type="submit" value="Update My Status" />
        </form>
        <?php if (isset($statusUpdate)) { ?>
            <br />
            <b style="color: red">Status Updated Successfully! Status id is <?=$statusUpdate['id']?></b>
         <?php } ?>
    </div>
    <?php } ?>

    </body>
</html>

參考資料: PHP SDK & Graph API base Facebook Connect Tutorial

.

.