お知らせ:

当社は、お客様により充実したサポート情報を迅速に提供するため、本ページのコンテンツは機械翻訳を用いて日本語に翻訳しています。正確かつ最新のサポート情報をご覧いただくには、本内容の英語版を参照してください。

Job Functionの設定

次に、Job Functionコンポーネントを設定して、ニュースアプリケーションのコーディングを開始しましょう。

ファンクションのディレクトリ(この場合はfunctions/NewsApp)には、以下が含まれています:

  • main.pyメインファンクションファイル
  • catalyst-config.json設定ファイル
  • requirements.txtファイル

main.pyファイルにコードを追加します。設定ファイルと依存関係ファイルのコードは変更しません。

はじめにで説明したように、Job Functionは2つのタスクを実行します: NewsAPIへのAPIコールを行いニュースを取得すること、およびCatalyst Data Storeにニュースを格納することです。APIコールにはNewsAPIが提供するAPIキーが使用されます。

NewsAPIへの登録

Job Functionのコーディングを行う前に、NewsAPIの無料開発者サブスクリプションに登録し、以下の方法でAPIキーを取得する必要があります:

  1. https://newsapi.org/registerにアクセスします。

  2. 必要な情報を入力し、Submitをクリックします。 register-api-key 登録が完了すると、NewsAPIからAPIキーが提供されます。コードセクションの後の指示に従って、このキーをCronファンクションで使用する必要があります。 api-key

ファンクションコードの追加

以下のコードをコピーし、プロジェクトのfunctions/NewsAppディレクトリにあるmain.pyに貼り付けてファイルを保存します。アプリケーションのファイルの作業には任意のIDEを使用できます。

注意: このセクションに記載されているコードを十分に理解してください。
main.py
copy
import logging
import zcatalyst_sdk
import requests
logger = logging.getLogger()
def handler(job_request, context):
    logger.info("Fetching news!")
    # ニュース項目を格納するData Store内のテーブル名
    table_name = ["HEADLINES", "BUSINESS", "ENTERTAINMENT", "HEALTH", "SCIENCE", "SPORTS", "TECHNOLOGY"]
    country = "US" # アメリカ合衆国からニュース項目を取得します
    api_key = "cc30ddcaxxxxxxxxxx" # NewsAPIから取得したAPIキーを引用符内に入力してください
    fetch_url = "https://newsapi.org/v2/top-headlines"
    # さまざまなカテゴリの速報ニュースをヘッドラインとともに取得します
    for category in table_name:
        # ニュース取得に必要なパラメータの構築
        params = {
            'country':country,
            'apiKey':api_key,
        }
        if category != "HEADLINES":
            params['category'] = category
        # News APIにAPIコールを行いデータを取得します
        response = requests.get(fetch_url, params=params)
        # レスポンスが200の場合、データはData Storeに移動されます。そうでない場合、エラーがログに記録されます。
        if response.status_code == 200:
            data = response.json()
            try:
                if 'articles' in data:
                    array_data = data['articles'][:15]
                    logger.info("15 days "+str(array_data))
                    # このメソッドはData Storeにニュースを挿入/更新します
                    push_to_datastore(array_data,category)
            except requests.RequestException as e:
                logger.error("Request failed: "+ str(e))
                context.close_with_failure() # アプリケーションを失敗で終了
            # アクションがログに記録されます。Catalyst Logsからログを確認できます。
            logger.info("New updated")
        else:
            logger.error("Request failed with status :: ",response.status_code)
            context.close_with_failure() # アプリケーションを失敗で終了
            context.close_with_success() # アプリケーションを成功で終了
def push_to_datastore(sliced_data,tableName):
    app = zcatalyst_sdk.initialize()
    zcql_service = app.zcql()
    datastore_service = app.datastore()
    # テーブル内の行数を確認するためのZCQLクエリを定義します
    query = "select ROWID from "+tableName
    zcql_result = zcql_service.execute_query(query)
    table_instance = datastore_service.table(tableName)
    # APIから取得したデータをData Storeに挿入/更新します
    for i in range(0,14):
        title = sliced_data[i]['title']
        url = sliced_data[i]['url']
        if len(zcql_result) == 0:
            # 新しい行を挿入
            row_data= {'title':title,'url':url}
            table_instance.insert_row(row_data)
            logger.info("Row inserted "+ str(row_data))
        else:
            # 行を更新
            row_data= {'title':title,'url':url,'ROWID':zcql_result[i][tableName]['ROWID']}
            table_instance.update_row(row_data)
            logger.info("Row inserted "+ str(row_data))

View more

注意: このコードをファンクションファイルにコピーして貼り付けた後、12行目のAPIKEYの値を、NewsAPIから取得したAPIキーに置き換えてください。

Job Functionの設定が完了しました。クライアントの設定後に、アプリケーションのアーキテクチャについて説明します。

最終更新日 2026-02-23 18:09:41 +0530 IST

関連リンク

Job Scheduling Job Functions