【OpenAI/ChatGPT】API リクエストしたら「You exceeded your current quota, please check your plan and billing details.」

無料で3ヶ月間、18ドル分使えるというので。


openai.api_key = os.getenv("OPENAI_API_KEY")
try:
  response = openai.Completion.create(
    engine="davinci",
    # engine="gpt-3.5-turbo",
    prompt="Hello, world!",
    max_tokens=5
  )
  print(response.choices[0].text)
except Exception as e:
  print(f"{e=}, {type(e)=}")

NGでした。


e=RateLimitError(message='You exceeded your current quota, please check your plan and billing details.', http_status=429, request_id=None), type(e)=<class 'openai.error.RateLimitError'>

利用量の確認をします。

Below you'll find a summary of API usage for your organization. All dates and times are UTC-based, and data may be delayed up to 5 minutes.
👉 Account - OpenAI API hatena-bookmark

利用の記録はないです。

無料18ドル分も付与されてない雰囲気。

「アカウント作成から3ヶ月以内。」ということですがそれは満たしている。

どういうことなんすかね!?

👉 How can I get Free Trial Credits? - General API discussion - OpenAI API Community Forum hatena-bookmark


Kotlin で Jetpack Compose, Retrofit を使って API リクエスト、JSON パース して、グリッド表示するコードをファイル別に表示して

Kotlin で Jetpack Compose と Retrofit を使って API リクエスト、JSON パースして、グリッド表示するためには、以下のようにファイルを分けることができます。

 

1. API リクエストを行うための Retrofit インターフェースを定義するファイル


interface ApiService {

    @GET("/photos")
    suspend fun getPhotos(): List<Photo>
}

 

2. API レスポンスを表すデータクラスを定義するファイル


data class Photo(
    val id: Int,
    val title: String,
    val url: String
)

 

3. API レスポンスをパースして、表示するための画面を定義するファイル


@Composable
fun PhotoGrid() {
    val photos by remember { mutableStateOf<List<Photo>>(emptyList()) }

    LaunchedEffect(Unit) {
        val apiService = Retrofit.Builder()
            .baseUrl("https://jsonplaceholder.typicode.com")
            .addConverterFactory(Json {
                ignoreUnknownKeys = true
            }.asConverterFactory("application/json".toMediaType()))
            .build()
            .create(ApiService::class.java)

        photos = apiService.getPhotos()
    }

    LazyVerticalGrid(cells = GridCells.Adaptive(minSize = 128.dp)) {
        items(photos) { photo ->
            Card(
                modifier = Modifier.padding(4.dp),
                shape = RoundedCornerShape(8.dp),
                elevation = 4.dp
            ) {
                Column(
                    Modifier
                        .fillMaxWidth()
                        .height(128.dp)
                        .padding(8.dp)
                ) {
                    Text(
                        text = photo.title,
                        style = MaterialTheme.typography.subtitle1,
                        maxLines = 2,
                        overflow = TextOverflow.Ellipsis
                    )
                    Spacer(modifier = Modifier.weight(1f))
                    CoilImage(
                        data = photo.url,
                        contentScale = ContentScale.Crop,
                        modifier = Modifier.fillMaxSize()
                    )
                }
            }
        }
    }
}

 

4. 上記の画面を表示するための Activity もしくは Fragment を定義するファイル


class MainActivity : ComponentActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContent {
            PhotoGrid()
        }
    }
}

以上のように、ファイルを分けることで、API リクエストやパース、表示を分離し、コードを見やすく、メンテナンスしやすくすることができます。

 

■ 感想

ただ、一行問いかけただけ。

ChatGPT で、ここまで書けるとは。



AndroidStudio 新規プロジェクトテンプレートから考える .gitignore

標準的な Android アプリ開発環境である AndroidStudio デフォルトのテンプレートは王道。

そのタイミングでの標準的なテンプレートです。

 

■ AndroidStudio プロジェクトデフォルト

今現在、公開されているプロジェクトテンプレートから確認してみます。

Empty Activity を選択しました。

AndroidStudio 新規プロジェクトテンプレートから考える .gitignore

👉 benigumocom/EmptyActivity-2023-02-09: androidstudio default template hatena-bookmark

プロジェクトルートから .gitignore を探ります。



これからスタートするのがいいでしょう。

 

■ A collection of .gitignore templates - github/gitignore

A collection of .gitignore templates

This is GitHub’s collection of .gitignore file templates. We use this list to populate the .gitignore template choosers available in the GitHub.com interface when creating new repositories and files.

👉 github/gitignore: A collection of useful .gitignore templates hatena-bookmark

GitHub 公式のリポジトリから公開されています。

Android アプリ開発に必要そうなものを挙げていきます。


👉 gitignore/JetBrains.gitignore at main · github/gitignore hatena-bookmark


👉 gitignore/macOS.gitignore at main · github/gitignore hatena-bookmark


👉 gitignore/Android.gitignore at main · github/gitignore hatena-bookmark


👉 gitignore/Gradle.gitignore at main · github/gitignore hatena-bookmark

Kotlin.gitignore は、以下 Java.gitignore のエイリアス。

👉 gitignore/Java.gitignore at main · github/gitignore hatena-bookmark

 

■ gitignore.io - toptal/gitignore


👉 gitignore.io - Create Useful .gitignore Files For Your Project hatena-bookmark で利用されている .gitignore リソースは以下で公開されています。

👉 gitignore/templates at master · toptal/gitignore hatena-bookmark

基本的には、先に紹介した github/gitignore と同じものですが、こちら側のみで公開している .gitignore があります。

なので、それらを貼っておきます。


👉 AndroidStudio.gitignore hatena-bookmark


👉 gitignore/Groovy.gitignore at master · toptal/gitignore hatena-bookmark


👉 gitignore/Firebase.gitignore at master · toptal/gitignore hatena-bookmark

 

■ まとめ

以上を参考にすれば、ほぼ書けるはずです。

AndroidStudio 新規プロジェクト作成時に書き出される .gitignore が必要最小限な洗練されてる記述に思えます。

あとは、不要なファイル公開を避ける記述を追加していく、という流れ。

git 全体としては、広く深く記述もいろいろなのでよく使うとこから身につけていく方がいいと思います。

👉 【これだけで大丈夫】.gitignore チートシート - A Memorandum hatena-bookmark

.gitignore 概念の説明や操作としては、GitHub 公式 Doc が最も分かりやすくまとまっています。

👉 ファイルを無視する - GitHub Docs hatena-bookmark
👉 What makes a good template? - github/gitignore: A collection of useful .gitignore templates hatena-bookmark