2023-10-31 課程補充資料 Week 08

Dokuwiki: https://www.cutexyz.com/edu/game2309/dokuwiki/

DEMO task
1. 登入
2. 進入大廳取得房間資訊
3. 進入房間取得座位
4. 啟動猜數字, 將答案送出
可以使用 Postman( 會來不及作答 ), 請全程使用 Python code 來進行.

今天 API 結果 URL
點名(登入成功): https://www.cutexyz.com/edu/game2309/API/
答題成果: https://www.cutexyz.com/edu/game2309/API/quest_game2.php

今日會使用的 API List, 注意新 API 位置, 23, 24

API 001: login
Protocol: HTTPS POST
API URL: https://www.cutexyz.com/edu/game2309/API/services/001_login.php
Parameters:
1. student_uid: 學號
2. pwd: 密碼, 預設為 cute301, 沒有忘記密碼功能, 如果有人忘記, 請先與老師通知
Return Data ( JSON FORMAT ):
1. result: 結果, OK 代表沒問題, ERROR 代表錯誤發生
2. data: 內含唯一資料 token( !! 有效期 10 秒 !! ): 用於登入之後呼叫別的 API 搭配使用
3. msg: 如果有需要詳述問題時就會在這邊顯示錯誤代號, 要知道詳情需呼叫 error msg 相關 API

API 100: updateprofile
Protocol: HTTPS POST
API URL: https://www.cutexyz.com/edu/game2309/API/services/100_updateprofile.php
Parameters:
1. student_uid: 學號
2. token: 你在登入後, 由系統發給你的動態密碼, 有效期內這個密碼不會變動
3. mode: 你想使用的功能; 1: 修改暱稱, 2: 修改密碼, 3: 上傳大頭貼
4.value1:帶入的參數, mode 1 請帶入暱稱, mode 2 輕帶入新的密碼, mode 3 請帶入檔案( jpg 限定)
Return Data ( JSON FORMAT ):
1. result: 結果, OK 代表沒問題, ERROR 代表錯誤發生
2. data: null 本 API 不會使用
3. msg: 如果有特殊裝框需要詳述問題時就會在這邊顯示

API 002: lobbyinfo
Protocol: HTTPS POST
API URL: https://www.cutexyz.com/edu/game2309/API/services/002_lobbyinfo.php
Parameters:
1. student_uid: 學號
2. token: 你在登入後, 由系統發給你的動態密碼, 有效期內這個密碼不會變動
Return Data ( JSON FORMAT ):
1. result: 結果, OK 代表沒問題, ERROR 代表錯誤發生
2. data:
players( array ), 目前登入大廳的玩家暱稱
broadcast_msg( array ), 廣播訊息( 可能不只一條訊息 )
messages( array ), 個人訊息( 可能不只一條訊息 ), 每一則訊息都會是一個 array,
內含有 sender( 發送訊息的玩家暱稱 )
以及 message( 對方所傳送的內容)
rooms( array ), 房間訊息,
內含有 room_id( 房間的 id )
room_name( 房間名稱 )
room_seats( 還有的空位 )
3. msg: 如果有特殊裝框需要詳述問題時就會在這邊顯示
參考資料

API 020: go_room
Protocol: HTTPS POST
API URL: https://www.cutexyz.com/edu/game2309/API/services/020_go_room.php
Description: 進入大廳取得房間清單之後就可以找一間有空位的去入房, 成功之後就可以去取得題目進行答題
Parameters:
1. student_uid: 學號
2. token: 你在登入後, 由系統發給你的動態密碼, 有效期內這個密碼不會變動
3. room_id: 您想要進入的房號, 記得要確認該房間有沒有空位喔!
Return Data ( JSON FORMAT ):
1. result: 結果, OK 代表沒問題, ERROR 代表錯誤發生
2. data:
seat_id, 入座成功的座位編號
3. msg: 如果有特殊裝框需要詳述問題時就會在這邊顯示
參考資料

API 021: my_quest
Protocol: HTTPS POST
API URL: https://www.cutexyz.com/edu/game2309/API/services/021_myquest.php
Description: 取得題目進行答題, 題目會以 8 個數字的加總為題, 8個數字會用 + 符號連接在一起
範例: 51+62+44+96+61+68+33+39
Parameters:
1. student_uid: 學號
2. token: 你在登入後, 由系統發給你的動態密碼, 有效期內這個密碼不會變動
Return Data ( JSON FORMAT ):
1. result: 結果, OK 代表沒問題, ERROR 代表錯誤發生
2. data:
quest, 題目, 請看下方參考資料
3. msg: 如果有特殊裝框需要詳述問題時就會在這邊顯示
參考資料

API 022: myquest_ans
Protocol: HTTPS POST
API URL: https://www.cutexyz.com/edu/game2309/API/services/022_myquest_ans.php
Description: 將答案送出給系統驗證
Parameters:
1. student_uid: 學號
2. token: 你在登入後, 由系統發給你的動態密碼, 有效期內這個密碼不會變動
3. my_ans: 你計算出來的答案, 答題只有 10 秒, 請勿使用人算的! 一定來不及!
Return Data ( JSON FORMAT ):
1. result: 結果, OK 代表沒問題, ERROR 代表錯誤發生
2. data:
ans_result, 答題結果, 0: 成功, 1: 答錯, 2: 過期了, 請重新取得題目並作答
3. msg: 如果有特殊裝框需要詳述問題時就會在這邊顯示
參考資料

API 023: my_quest2
Protocol: HTTPS POST
API URL: https://www.cutexyz.com/edu/game2309/API/services/023_myquest2.php
Description: 取得題目進行答題, 題目4個不重複的數字, 不包含 0
Parameters:
1. student_uid: 學號
2. token: 你在登入後, 由系統發給你的動態密碼, 有效期內這個密碼不會變動
Return Data ( JSON FORMAT ):
1. result: 結果, OK 代表沒問題, ERROR 代表錯誤發生
2. data:
null, 不需要!
3. msg: 如果有特殊裝框需要詳述問題時就會在這邊顯示

API 024: myquest2_ans
Protocol: HTTPS POST
API URL: https://www.cutexyz.com/edu/game2309/API/services/024_myquest2_ans.php
Description: 將答案送出給系統驗證
Parameters:
1. student_uid: 學號
2. token: 你在登入後, 由系統發給你的動態密碼, 有效期內這個密碼不會變動
3. my_ans: 你計算出來的答案, 答題只有 10 秒, 請勿使用人算的! 一定來不及!
Return Data ( JSON FORMAT ):
1. result: 結果, OK 代表沒問題, ERROR 代表錯誤發生
2. data:
hint 幾A幾B, A代表位置與數字都是對的, B代表數字對了, 但是位置不對, 如果 hint 是 4A 代表已經答對
了, 需呼叫 API 23 重新刷新題目才可以繼續作答喔!
3. msg: 如果有特殊裝框需要詳述問題時就會在這邊顯示

API 029: leave_room
Protocol: HTTPS POST
API URL: https://www.cutexyz.com/edu/game2309/API/services/029_leave_room.php
Description: 離開房間, 通常是要換另一個房間才會呼叫
Parameters:
1. student_uid: 學號
2. token: 你在登入後, 由系統發給你的動態密碼, 有效期內這個密碼不會變動
Return Data ( JSON FORMAT ):
1. result: 結果, OK 代表沒問題, ERROR 代表錯誤發生
2. data: null
3. msg: 如果有特殊裝框需要詳述問題時就會在這邊顯示

API 900: errmsg
Protocol: HTTPS POST
API URL: https://www.cutexyz.com/edu/game2309/API/services/900_errormsg.php
Parameters:
1. student_uid: 學號
2. error_no: 錯誤代碼, i.e. 20001
Return Data ( JSON FORMAT ):
1. result: 結果, OK 代表沒問題, ERROR 代表錯誤發生
2. data: 內有一個參數 error_msg, 此內容即為錯誤訊息內容
3. msg: 如果有特殊裝框需要詳述問題時就會在這邊顯示

DEMO

import json
import requests

#準備資料
student_uid = '1234567890'
student_pwd = 'abcd'

# --------------------------------------------------------------------------------------
# API 001 Login
url_target = "https://www.cutexyz.com/edu/game2309/API/services/001_login.php"
my_data = {'student_uid': student_uid, 'pwd': student_pwd}

# 將檔案加入 POST 請求中
r = requests.post(url_target, data = my_data)
print("Result: ", r.content.decode('UTF-8'))

dataArray = json.loads(r.content.decode('UTF-8'))
my_token = dataArray['data']['token']
print("Token: ", my_token)

# --------------------------------------------------------------------------------------
# API 100 updateprofile
my_data = {'student_uid': student_uid, 'token': my_token, 'mode': '3'}

# 要上傳的檔案
my_files = {'value1': open('head.jpg', 'rb')}

url_target = "https://www.cutexyz.com/edu/game2309/API/services/100_updateprofile.php"

# 將檔案加入 POST 請求中
r = requests.post(url_target, files = my_files, data = my_data)
print("Result: ", r.content.decode('UTF-8'))


# --------------------------------------------------------------------------------------
# API 002 lobbyinfo
url_target = "https://www.cutexyz.com/edu/game2309/API/services/002_lobbyinfo.php"
my_data = {'student_uid': student_uid, 'token': my_token}

# 將檔案加入 POST 請求中
r = requests.post(url_target, data = my_data)
print("Result: ", r.content.decode('UTF-8'))

dataArray = json.loads(r.content.decode('UTF-8'))
#print("Token: ", dataArray['data']['token'])

jsondata = '{"respond":"OK", "value":"12345678"}';
dataArray = json.loads(jsondata);

print("A: ", dataArray["respond"])
exit(0);