-ださろぐシステム開発者からコーヒー屋への道。APIとjqコマンドで今更ながら色々捗るなーという話。2.5.2.stableこんなチケットを作ってみて動かします。KEY(ユーザー管理画面より発行)を含めることで認証出来ます。1.1.0)とドキュメントにあるように、三通りの方法があります。こんなに対応せんでもええんやないか、と思います。curlで叩いてみます。http://redmine.mydomain.com/issues.json認証に成功するとissuesのJSONがごちゃっと返ってきます。そのままでは見づらいのでとりあえずjqに食わせてみます。"機能追加"}見やすいですね。絞り込みとか加工とかデータが取れたので色々加工してみます。自分にアサインされたissuesを取得してjqで表示項目を絞り込んでみる。"バグだよ1"}文字列を整形してリストっぽくデータを取ってみるjqは文字列内に取得したデータを入れ込んだり、各種演算子も使えたりするのでこんな出力も得られます。.com](1.5h)作成済のカスタムクエリの条件を適用してみるredmine側で作成した既存のカスタムクエリの出力をjsonで得ることも出来ます。issuesのAPIにはないのですが、下記のように画面表示と同じURL構造にして/projects/{プロジェクト名}/issues.json?query_id={クエリID}というリクエストを送るとカスタムクエリの条件が適用されます。いうか単純に画面でリストを表示して、拡張子を.jsonとか.xmlにすることによってその形式で出力してくれるようです(なのでこちらは厳密にはAPIで提供されてるわけではないっぽい)「担当が自分で見積もり時間が2以上かかるタスク」という条件のカスタムクエリで試してみます。"機能追加だよ"}コマンドを組み合わせて集計とかパイプでawkなどに渡すことによって簡単な集計処理も出来ます。m}'4.5特定の期間内のチケットの集計とか工夫次第で色々出来そうですね。まとめRedmineAPIとjqの組み合わせでコマンドラインから色々出来るのでベンリだよ!という事を言いたかった。いえ各種コマンドとの組み合わせでもうちょっとベンリに使える気がするのでシェル力アップのためにもうちょっと勉強しようと思います。2014http://bakery.cakephp.org/articles/markstory/2014/07/21/cakephp_2_5_3_and_1_3_20_released7/21に久々に1.3系を含むCakeのアップデートがリリースされました。1.3系も更新されるやつは大体やばいやつ、ということで今回も何やらやばそうな事が書いてあります。lossとはどういうことか、実際に試して確認してみました。結論save(update)処理の最中に対象レコードが削除されると、〜where1=1というえらいクエリが発行されて更新しようとした内容で全件updateが発生します。速やかにバージョンアップしましょう。1.3系は他に変更点はなさそうです。環境PHP5.4.31CakePHP1.3.19(再現環境)試してみるsystem_logsというテーブルに対してID指定で更新をかける下記のようなコードを実行。下記のようなクエリが実行される。100カウントが二回実行されてますがどちらも存在チェック(model::exits())で呼ばれてます。普通にアップデートされてますね。19:00:29')最初の存在チェックでレコードが存在しないため、insertが実行されました。初回の存在チェックと、二回目の存在チェック(DboSource::defaultConditions)より前にsleepを入れてレコード削除。1WHERE1=1というやばそうなUPDATEが実行されました。1というSQLが発行されるようです。以下のように修正されてます。$model->__safeUpdateModeはsaveによる更新時はtrueとなります。}存在チェックに引っかかった場合はnullではなくfalseが返るようになります。defaultConditionsでfalseが返された場合、実行されるSQLは以下のようになります。1お、おう、という感じはしますが結果的に更新はかからなくなります。影響は?同一レコードに対する更新、削除が頻繁に行われるようなシステムでなければ(例えば特定のユーザーに紐付いたデータ等であれば)そんなに起こることはなさそうですが、バッチによる一斉更新とユーザー操作がかぶったりした場合に運悪いと遭遇しそうです。速やかにアップデートしましょう。最後にnullとかfalseとかarrayとかが混在して戻ってくるやつをアレコレするの見てて辛い。