API 主要介面:https://api.hamcq.cn/v1/logbook?from=gridtracker,其中from參數具有過濾機制,必須符合以下條件:gridtracker。
參數 (application/json):
{
"關鍵字": "YOUR_API_KEY",
"ADIF": "ADIF_STRING",
"應用程式名稱": "YOUR_APPLICATION_NAME"
}
其中,「key」必須填寫。如果僅填寫「key」,等同於測試該「key」是否有效,同時正確填寫所有參數才能正常進行日誌上傳。
如果鍵有效,後端將回傳「Pass」,而且只要鍵正確,無論上傳的ADIF是否符合規範都會回傳「Pass」,只是不會記錄相關日誌。如果是其他情況,可能會提供一個JSON說明原因,例如:
// 此時 HTTP 狀態碼為 406
{"code":406,"status":false,"message":"無效"}
範例:
// 請參閱 https://github.com/SydneyOwl/cloudlog-helper 了解更多資訊
public class HamCQAPIExample
{
public static async Task<string> TestHamCQConnectionAsync(string apikey)
{
return await UploadQSOToHamCQAsync(apikey, null);
}
public static async Task<string> UploadQSOToHamCQAsync(string apikey, string? adif)
{
try
{
var reqJson = new JObject { { "key", apikey } };
if (adif is not null)
{
reqJson.Add("adif", adif);
reqJson.Add("app", DefaultConfigs.DefaultApplicationName);
}
var result = await DefaultConfigs.HamCQQsoUploadEndpoint
.AllowHttpStatus(406)
.WithHeader("User-Agent", DefaultConfigs.DefaultHTTPUserAgent)
.WithHeader("Content-Type", "application/json")
.WithTimeout(TimeSpan.FromSeconds(DefaultConfigs.DefaultRequestTimeout))
.PostStringAsync(reqJson.ToString());
var responseText = await result.GetStringAsync();
var code = result.StatusCode;
if (responseText == "Pass") return string.Empty;
var res = JsonConvert.DeserializeObject<JObject>(responseText);
if (res is null) return $"HamCQ 錯誤: {TranslationHelper.GetString("invalidapikey")}({responseText})";
return $"HamCQ 錯誤: {TranslationHelper.GetString("invalidapikey")} ({res["message"]})";
}
catch (Exception e)
{
return e.Message;
}
}
}