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キーを取得する必要があります:
-
https://newsapi.org/registerにアクセスします。
-
必要な情報を入力し、Submitをクリックします。
登録が完了すると、NewsAPIからAPIキーが提供されます。コードセクションの後の指示に従って、このキーをCronファンクションで使用する必要があります。

ファンクションコードの追加
以下のコードをコピーし、プロジェクトの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))
注意: このコードをファンクションファイルにコピーして貼り付けた後、12行目のAPIKEYの値を、NewsAPIから取得したAPIキーに置き換えてください。
Job Functionの設定が完了しました。クライアントの設定後に、アプリケーションのアーキテクチャについて説明します。
最終更新日 2026-02-23 18:09:41 +0530 IST