1.建立API
(1)進入彰化縣CloudSchool,系統管理->模組管理->API及憑證設定
(2)新增學校伺服器API
可以得到用戶端ID 與用戶端密碼
2.Rest API 測試工具3.測試方式,以 學期資料 api 為例 https://api.chc.edu.tw/semester-data
與程式碼的關聯
Client ID 為 用戶端ID
Client Secret 為 用戶端密碼
與程式碼的關聯
// API URL
$api_url = 'https://api.chc.edu.tw';
// 設定擷取的URL網址
curl_setopt($ch, CURLOPT_URL, $api_url."/oauth?authorize");
//設定CURLOPT_POST為TRUE或1,表示要用POST傳遞
curl_setopt($ch, CURLOPT_POST, TRUE);
//將curl_exec()獲得的訊息以文件流的形式返回,而不是直接輸出
////將結果回傳成字串
curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
//CURLOPT_POSTFIELDS後面則是要傳接的POST資料
curl_setopt($ch, CURLOPT_POSTFIELDS, array(
'client_id' => $client_id,
'client_secret' => $client_secret,
'grant_type' => 'client_credentials'
));
與程式碼的關聯
//curl_exec($ch)為執行
$data = curl_exec($ch);
//json_decode($data) 將json轉成object,測試語法var_dump(json_decode($data));
//json_decode($data,true) 將json轉成array,測試語法var_dump(json_decode($data,true));
$data = json_decode($data);
//取 access token
$access_token = $data->access_token;
圖中按下1.,即可取的資料,如下圖與程式碼的關聯
//執行API
$authorization = "Authorization: Bearer ".$access_token;
// 設定擷取的URL網址
curl_setopt($ch, CURLOPT_URL, $api_url.$api_name);
//設定自定義http標頭set custom HTTP headers
curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type: application/json' , $authorization )); // **Inject Token into Header**
//自定義字串的請求 custom string for request
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "GET");
//將curl_exec()獲得的訊息以文件流的形式返回,而不是直接輸出
//將結果回傳成字串
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
//是否抓取轉址
//curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
與程式碼的關聯˙\
//curl_exec($ch)為執行
$result = curl_exec($ch);
//json_decode($data) 將json轉成object,測試語法var_dump(json_decode($data));
//json_decode($data,true) 將json轉成array,測試語法var_dump(json_decode($data,true));
$data = json_decode($result);
// 關閉 CURL 連線
curl_close($ch);
OAuthApiTest.php
<?php
/**
同步遠端學校學期資料
**/
// 更改為學校的 API ID
$client_id = 'XXXXXXXXXXXXXXXXXXXXX';
// 更改為學校的 API 密碼
$client_secret = 'XXXXXXXXXXXXXXXXX';
// =================================================
// API NAME
$api_name = '/semester-data';
// API URL
$api_url = 'https://api.chc.edu.tw';
// 建立 CURL 連線
$ch = curl_init();
// 取 access token
// 設定擷取的URL網址
curl_setopt($ch, CURLOPT_URL, $api_url."/oauth?authorize");
//設定CURLOPT_POST為TRUE或1,表示要用POST傳遞
curl_setopt($ch, CURLOPT_POST, TRUE);
// the variable
//將curl_exec()獲得的訊息以文件流的形式返回,而不是直接輸出
////將結果回傳成字串
curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
//CURLOPT_POSTFIELDS後面則是要傳接的POST資料
curl_setopt($ch, CURLOPT_POSTFIELDS, array(
'client_id' => $client_id,
'client_secret' => $client_secret,
'grant_type' => 'client_credentials'
));
//curl_exec($ch)為執行
$data = curl_exec($ch);
//json_decode($data) 將json轉成object,測試語法var_dump(json_decode($data));
//json_decode($data,true) 將json轉成array,測試語法var_dump(json_decode($data,true));
$data = json_decode($data);
//取 access token
$access_token = $data->access_token;
//執行API
$authorization = "Authorization: Bearer ".$access_token;
// 設定擷取的URL網址
curl_setopt($ch, CURLOPT_URL, $api_url.$api_name);
//設定自定義http標頭set custom HTTP headers
curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type: application/json' , $authorization )); // **Inject Token into Header**
//自定義字串的請求 custom string for request
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "GET");
//將curl_exec()獲得的訊息以文件流的形式返回,而不是直接輸出
//將結果回傳成字串
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
//是否抓取轉址
//curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
//curl_exec($ch)為執行
$result = curl_exec($ch);
//json_decode($data) 將json轉成object,測試語法var_dump(json_decode($data));
//json_decode($data,true) 將json轉成array,測試語法var_dump(json_decode($data,true));
$data = json_decode($result);
// 關閉 CURL 連線
curl_close($ch);
print_r($data);
?>
資料來源:1.臺中市政府教育局校端 API 應用手冊 (1.0.0)
2.OAuth2 API
3.OAuth2 API
4.臺中市雲端校務系統與Windows AD帳號整合(7)
5.雲端校務系統與OPENLDAP帳號整合(3)
6.將 Cloud School 學期資料同步至校內伺服器資料庫
7.如何實作 Cloudschool OAUth2 認證?
8.[程式][PHP] 如何使用PHP CURL,基礎教學
9.[php]json_decode 將json轉成陣列或object
10.[PHP]curl抓取網頁
沒有留言:
張貼留言