Splunk模块化输入更新参数
问题描述:
是否有方法使用Splunks 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"])
我将since_id
参数设置为0,然后我第一次调用Twitter API。之后,我得到的结果我想更新since_id
参数与Twitter搜索元数据(output["search_metadata"]["max_id"]
)
感谢max_id
领域的任何帮助
答
使用检查点来存储since_id
你在这种情况下最好的选择。粗略地说,你的代码应该看起来很类似。我已经离开了TODO文件IO部分。对于GitHub提交C#SDK的JavaScript &中的示例,我们在检查点文件中存储了每行1个提交。对于你的情况,你只需要在文件中存储since_id
。请注意,每个输入实例都应该有它自己的检查点文件(即:每个输入都映射到一个hashtag,所以你应该为每个hashtag建立一个检查点文件)。
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
谢谢你的帮助。我还有一个简短的问题。你知道为什么有些推文是重复的吗? – BlackSalt
@BlackSalt是由Twitter API还是Splunk?无论哪种方式,我认为保证唯一推文的最佳方法是在检查点文件中为每条推文存储一个唯一值。例如,“splunk/status/727553815617114113”,但可能只是该数字足够独特。您必须阅读Twitter API文档才能确定 – Shakeel