2016-04-29 6 views
1

Splunk Python SDKを使用してモジュラ入力スクリプトの入力パラメータを更新する方法はありますか?Splunkモジュール入力更新パラメータ

def stream_events(self, inputs, ew): 
    twitter = OAuth1Session(api_key, api_secret, access_token, access_token_secret) 

    for input_name, input_item in inputs.inputs.iteritems(): 
     hashtag = input_item["hashtag"] 
     since_id = input_item["since_id"] 

     if since_id == "0": 
      url = "https://api.twitter.com/1.1/search/tweets.json?q=%%23%s" % hashtag 
     else: 
      url = "https://api.twitter.com/1.1/search/tweets.json?since_id=%s&q=%%23%s" % (since_id, hashtag) 

     r = twitter.get(url) 

     output = json.loads(r.content) 
     if len(output["statuses"]) != 0: 

      for tweet in output["statuses"]: 
       print_xml_stream(input_name, json.dumps(tweet), tweet["created_at"]) 

私はその後、私は初めてTwitterのAPIを呼び出して、0にsince_idパラメータを設定します。私は結果を取得した後、私はこのケースでsince_idあなたの最良の選択肢を格納するためのチェックポイントを使用して任意のヘルプ

答えて

1

のためのTwitterの検索メタデータ(output["search_metadata"]["max_id"]

おかげからmax_idフィールドでsince_idパラメータを更新します。あなたのコードがおおよそのように見えるものの違いは次のとおりです。私はTODOをファイルIO部分に残しました。 GitHubがJavaScript & C#SDKの例をコミットするため、チェックポイントファイルには1行に1コミットSHAを格納します。あなたの場合は、since_idだけをファイルに保存する必要があります。入力の各インスタンスに独自のチェックポイントファイルが必要であることに注意してください(つまり、各入力は単一のハッシュタグにマッピングされるため、インデックスを作成するハッシュタグごとに1つのチェックポイントファイルが必要です)。

diff --git a/program.py b/program.py 
index 95f69de..defb535 100644 
--- a/program.py 
+++ b/program.py 
@@ -1,14 +1,17 @@ 
def stream_events(self, inputs, ew): 
    twitter = OAuth1Session(api_key, api_secret, access_token, access_token_secret) 

+ checkpoint_dir = inputs.metadata['checkpoint_dir'] 
+ 
    for input_name, input_item in inputs.inputs.iteritems(): 
     hashtag = input_item["hashtag"] 
     since_id = input_item["since_id"] 

-  if since_id == "0": 
-   url = "https://api.twitter.com/1.1/search/tweets.json?q=%%23%s" % hashtag 
-  else: 
-   url = "https://api.twitter.com/1.1/search/tweets.json?since_id=%s&q=%%23%s" % (since_id, hashtag) 
+  checkpoint_file_path = os.path.join(checkpoint_dir, hashtag + ".txt") 
+ 
+  since_id = "" # TODO: read from the file 
+   
+  url = "https://api.twitter.com/1.1/search/tweets.json?since_id=%s&q=%%23%s" % (since_id, hashtag) 

     r = twitter.get(url) 

@@ -16,4 +19,6 @@ def stream_events(self, inputs, ew): 
     if len(output["statuses"]) != 0: 

      for tweet in output["statuses"]: 
-    print_xml_stream(input_name, json.dumps(tweet), tweet["created_at"]) 
\ No newline at end of file 
+    print_xml_stream(input_name, json.dumps(tweet), tweet["created_at"]) 
+ 
+  # TODO: on success, update the contents of the checkpoint file 
\ No newline at end of file 
+1

ありがとうございました。もう少し短い質問があります。なぜあなたはいくつかのつぶやきが重複している理由を知っていますか? – BlackSalt

+0

@BlackSaltは、Twitter APIやSplunkで複製されていますか?どちらの方法でも、一意のツイートを保証する最良の方法は、チェックポイントファイル内の各ツイートの一意の値を格納することです。たとえば、 "splunk/status/727553815617114113"でも、数だけでも十分にユニークです。あなたは確かに見つけるためにTwitterのAPIドキュメントを読む必要があります – Shakeel

関連する問題