2017-03-17 12 views
0

私はcurlを使ってAPIからデータを取り込み、スクリプトの大半を実行しようとしていますが、助けが必要です。 APIは検索する必要がある複数のページに結果があり、私はその関数をスクリプト化することができましたが、ループを止める方法を理解できません。また、各ページのデータを個々のイベントに分割する方法を理解する上で、いくつかの支援が必要です。各イベントは同じ文字列で始まるので、イベントを分割するために使用するテキストを知っていますが、そのための構文はわかりません。誰かがそれを助けることができますか?私のコードは以下の通りです:ひねったBashスクリプティングカールのリクエスト

#!/bin/sh 
string='next\":null' 
    for ((i=1;until $string;i++)); do 
    curl -H "Authorization: Token insertlongtokenhere" -H "Content-Type: application/json" https://api.app.secunia.com/api/tickets/?page=$i 
done 

この文字列メソッドを使用して私が無駄に二重引用符をコメントアウトする他の方法を試してみた

./secunia.sh: line 3: ((: until next\":null: syntax error: invalid arithmetic operator (error token is "\":null") 

を与えるので、私は一種のこだわっています。

+0

「$ string」まではどういう意味ですか? – Barmar

+0

'for'ループ内の終わりをテストし、' break'ステートメントを使ってループを停止することができます。 – Barmar

+0

私は終わったと思ったが、私はそうではなかった。私はSplunkにページの内容をイベントに分割させたいと考えていましたが、それはできません。私はイベントの間にあるコンマを捨てようとしていますが、うまくいきません。これは、 "last_updated"に入っているjsonの部分です: "2017-02-28T17:56:19Z"}、{"id":588699、 "name":null、 'これはsed行です'sed -e 's /}、{/} + {/" -e "s}} * $ /} /" secunia.txt | tr "+" "\ n" '、そして私はforループの外に置いていますが、'、 'を引き出すわけではありません。私は何が欠けていますか? – manderson

答えて

0

forヘッダーからエンドテストを行い、ループ内でテストします。その後、breakを使用してループを終了することができます。

for ((i=1; ; i++)); do 
    contents=$(curl -H "Authorization: Token insertlongtokenhere" -H "Content-Type: application/json" https://api.app.secunia.com/api/tickets/?page=$i) 
    echo "$contents" 
    if [[ $contents =~ 'next":null' ]] 
    then break 
    fi 
done 
+0

スクリプトは、最後のページの次のページをダウンロードしようとします。これは最後のページが最後のページであることを示す最初の適用可能な文字です: '{" count ":66、" next ":null、' {"count":66 "はすべてのページにあります。また、お手伝いをしていただきありがとうございます。編集:私はブレークラインを次の ":"ヌルにすると同じことが起こります。 – manderson

+0

'contents'の前に' $ 'が必要です。私は思っていましたが、これは必要ありませんでした。 – Barmar

+0

それは、ありがとう! – manderson

関連する問題