質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Google Apps Script

Google Apps ScriptはGoogleの製品と第三者のサービスでタスクを自動化するためのJavaScriptのクラウドのスクリプト言語です。

API

APIはApplication Programming Interfaceの略です。APIはプログラムにリクエストされるサービスがどのように動作するかを、デベロッパーが定めたものです。

Q&A

1回答

1165閲覧

GASでのでの外部API実行実行

s.20

総合スコア10

Google Apps Script

Google Apps ScriptはGoogleの製品と第三者のサービスでタスクを自動化するためのJavaScriptのクラウドのスクリプト言語です。

API

APIはApplication Programming Interfaceの略です。APIはプログラムにリクエストされるサービスがどのように動作するかを、デベロッパーが定めたものです。

0グッド

0クリップ

投稿2023/02/28 11:12

実現したいこと

*マインクラフトサーバーです。

  • Google Apps Scriptで外部のAPIを実行したい
  • Agamesというマイクラサーバーの管理をしたい(pterodactyl)

前提

Google Apps Scriptでpterodactyl製のサーバー管理システムを管理したい
具体的に、

  • LINE上でサーバー上のファイルを削除したい

用途

  1. LINE上で指定フォルダ("worlds")を削除
  2. 自動で再起動してワールドを一から作り直す

発生している問題・エラーメッセージ

GAS上では実行完了となっていますが実際にファイルを削除できていません。

///

該当のソースコード

GAS

1function myFunction() { 2 const Uli = "https://p2.agames.jp/api/client/"; 3 //サポートより教えていただきました。 4 5 const options = 6 { 7 "headers" : { 8 "Accept" : "application/json", 9 "Content-Type" : "application/json", 10 "Authorization" : apikey 11 }, 12 "body" :{ 13 "root": "/home", 14 "files": [ 15 "worlds" 16 ] 17} 18 }; 19 UrlFetchApp.fetch(Uli, options); 20} 21

試したこと

bodyの中の"files"を"folders"に変えたりしました。
公式のドキュメントの見方が難しくてよくわかりませんでした。

補足情報(FW/ツールのバージョンなど)

【Minecraft】
Bed Rock
【使用サーバー】
Agamesさん
【ドキュメント】
pterodactyl[公式サイト]
pterodactyl [APIドキュメント]

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

YAmaGNZ

2023/02/28 11:21

UrlFetchApp.fetchの戻り値は確認されましたか?
s.20

2023/02/28 11:25

何も出なくて"完了"で終わってしまってます
YAmaGNZ

2023/02/28 11:34

UrlFetchApp.fetch と戻り値を取得していないので、取得して中身を確認してみましょう。 その中に404とかHTTPのステータスコードとかが入っています。
s.20

2023/02/28 11:38

どうしたら取得できますか 教えて欲しいです。 また、エラーが起きた時は404や401などのHTTPステータスは表示されていました
YAmaGNZ

2023/02/28 11:53

「UrlFetchApp.fetch 戻り値」とでも検索すればいろいろ出てきます。
s.20

2023/02/28 11:58

{ toString: [Function], getResponseCode: [Function], getContent: [Function], getContentText: [Function], getHeaders: [Function], getAllHeaders: [Function], getBlob: [Function], getAs: [Function] } このように帰ってきました
YAmaGNZ

2023/02/28 12:24

getResponseCodeやgetContentTextを使ってAPIを呼び出した結果何が返ってきたのか確認してみてください。 またAPIのドキュメントに POST [ /delete] Delete file https://pterodactyl.file.properties/api/client/servers/1a7ce997/files/delete Deletes the specified file(s) or folder(s) Headers Accept application/json Content-Type application/json Authorization Bearer apikey とPOSTするようにありますので、それに合わせてoptionを指定してみてください。 私もこのAPIは使用したことがありませんので、このAPI特有の詳しい話はわかりません。
guest

回答1

0

私はこのAPIを試せる環境にないのでAPIドキュメントを見てのあくまで予想での回答になります。

多分ですが手順としては以下のような手順になるのではないかと思います。

1.サーバーの情報を取得する

https://p2.agames.jp/api/client/ 」をGETで呼び出してサーバーのID(?)を取得する。
ドキュメントによるとhttps://p2.agames.jp/api/client/ にてサーバーのリスト情報を取得できます。
それは下記のようにJSONで返ってきます。

{
"object": "list",
"data": [
{
"object": "server",
"attributes": {
"server_owner": true,
"identifier": "1a7ce997",
"uuid": "1a7ce997-259b-452e-8b4e-cecc464142ca",
"name": "Gaming",
"node": "Test",
"sftp_details": {
"ip": "pterodactyl.file.properties",
"port": 2022
},
"description": "Matt from Wii Sports",
"limits": {
以下省略

この中の
"identifier": "1a7ce997"
の部分の1a7ce997を取得する。
複数のサーバーがある場合はdataの中にサーバーの情報が複数返ってくると思われます。

コードは下記のような感じになると思います。(実行していないので動作するかは保証しません)

GAS

1 headers = { 2 "Accept" : "application/json", 3 "Authorization" : 'Bearer '+ apikey 4 }; 5 6 options = { 7 "headers": headers 8 }; 9 10 let response = UrlFetchApp.fetch('https://p2.agames.jp/api/client/', options); 11 12 let data = JSON.parse(response.getContentText()); 13 // この後identifierの部分の情報を取り出す 14 Logger.log(data.data[0].attributes.identifier); 15

2. ファイル削除のAPIを呼ぶ

https://p2.agames.jp/api/client/servers/1a7ce997/files/delete 」をPOSTで呼び出す。
1a7ce997の部分は1で取得した情報

コード例は以下の通り(実行していないので動作するかは保証しません)

GAS

1 let serverid = '1で取得したID'; 2 let uri = `https://p2.agames.jp/api/client/servers/${serverid}/files/delete` 3 4 headers = { 5 "Accept" : "application/json", 6 "Content-Type" : "application/json", 7 "Authorization" : 'Bearer '+ apikey 8 }; 9 10 body = { 11 "root": "/home", 12 "files": [ 13 "worlds" 14 ] 15 }; 16 17 options = { 18 "headers": headers, 19 "method" : 'post', 20 "payload" : JSON.stringify(body) 21 }; 22 23 let response = UrlFetchApp.fetch(uri, options); 24

多分サーバーのIDが分かってしまえば1は毎回実行しなくてもいいのではないかと思います。

貴方の環境がどのようなものか分かりませんので、1の手順で取得したIDが間違えていて2で重要なファイルを削除するようなことになる可能性もありますのでテストは慎重に行ってください。

投稿2023/03/01 02:04

編集2023/03/01 03:21
YAmaGNZ

総合スコア10242

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

s.20

2023/03/01 05:27

回答ありがとうございます。 実行はできましたが、 { toString: [Function], getResponseCode: [Function], getContent: [Function], getAllHeaders: [Function], getContentText: [Function], getHeaders: [Function], getAs: [Function], getBlob: [Function] } と帰ってきて、実際にファイルの削除ができません。。 どうしたらいいのでしょうか
YAmaGNZ

2023/03/01 06:10

どのようなコードで何を実行したのか知りませんが、質問へのコメントでも書いたようにgetResponseCodeやgetContentTextを使ってどのようなコードが返ってきているのかを確認してください。
s.20

2023/03/02 13:04

返信ありがとうございます。 getResponseCodeなどを使用しても、204ステータスで、 { toString: [Function], getResponseCode: [Function], getContent: [Function], getAllHeaders: [Function], getContentText: [Function], getHeaders: [Function], getAs: [Function], getBlob: [Function] } としか返ってきません。
YAmaGNZ

2023/03/02 22:12

私の回答での1の手順でIDが取得でき、2の手順を実行したときに204が返ってくるということですか? もしそうなのだとすれば、APIの呼び出し自体は正常に行われているのではないかと思います。 ただ、消すべきファイルが存在しない場合などどのようなリターンとなるかドキュメントに記載がないので消すべきフォルダのパスが合っているのかなど確認してみてください。 私が分かるのは「こうやればAPIが呼び出せると思う」というレベルでAPIを呼んだときの動作などについては分かりません。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問