有没有办法用Splunks Python SDK更新模块化输入脚本的输入参数?
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"])
我将since_id
参数设置为0,然后我第一次调用Twitter API。获得结果后,我想使用Twitter搜索元数据(since_id
)中的max_id
字段更新output["search_metadata"]["max_id"]
参数
感谢您的帮助
答案 0 :(得分:1)
在这种情况下,使用检查点存储since_id
您的最佳选择。这是你的代码应该是粗略的差异。我已经为文件IO部分留下了TODO。对于GitHub提交的JavaScript和& amp;在C#SDK中,我们在检查点文件中每行存储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