0

私は Flickr で API 呼び出しに取り組んでおり、次のような写真ごとに結果を返します。

<photo id="7503362468" owner="59044395@N02" secret="66b94027db" server="8423" farm="9" title="Potluck" ispublic="1" isfriend="0" isfamily="0" />

現在、Flickr の URL/API ドキュメントによると、URL は次のように構成されており、mstzb は写真のサイズを示す 1 文字の指標です。

http://farm{farm-id}.staticflickr.com/{server-id}/{id}_{secret}_[mstzb].jpg

だから、私の質問は、各行を取ることができる一括検索と置換に関係しています。http://farmあとは基本的に「空白を埋める」だけです。目標は、API を使用して安静な XML を取得することです。次に、その XML に置換を投げて、URL のリストを生成します。私はsedに少し精通しています-確かにウィザードはありません-しかし、行ごとに検索して置換する方法がわかりません。もちろん、farm-id は URL に入る最初のフィールドであり、XML の 5 番目のフィールドです。つまり、検索と置換のパターンは各行の同じ場所に従います。確かに、繰り返しますが、私は正規表現タイプのものを始めたばかりであり、助けていただければ幸いです。また、この種の質問は以前にもあったようですが、sed スタイルの置換ではなく、URL 構文の作成方法に重点が置かれているようでした。私が言ったように、s/unnecessary/necessary- 特定の引用されたフィールドを選択して、事前に形成された行に移動する方法がわかりません。

編集: もう少し情報 - 私は Flickr の API Explorer を使用してこれらの XML ファイルを生成しています。通常、編集には bash を使用します。私がここで目指しているのは、bash スクリプト、あるいは (願わくは) 実行可能なプログラミング言語の一部にさえ近いものだと思います。私はPythonのような言語に「少し」慣れていますが、bashスクリプト以外のコードを書いた経験はまったくありません。ここで API Explorer を確認できます: http://www.flickr.com/services/api/explore/?method=flickr.photos.search

ありがとうございます!

4

2 に答える 2

0

awkを使用した3つのソリューション:

解決策1.すべてのxmlレコードが指定されたサンプルのように見え、すべてのフィールドがサンプルのシーケンスに正確に含まれていると想定します。

二重引用符がフィールド区切り文字として設定され、入力行内の位置変数として目的のコンテンツにアクセスします。

ファイルには多くの入力レコードが含まれる可能性があり、すべてが1回の実行で変換されます。

#!/usr/bin/awk -f
#<photo id="7503362468" owner="59044395@N02" secret="66b94027db" server="8423" farm="9" title="Potluck" ispublic="1" isfriend="0" isfamily="0" />
#1          2          3       4            5        6          7        8    9      `10 11     12      13         14 15        16 17        18 19
#http://farm{farm-id}.staticflickr.com/{server-id}/{id}_{secret}_[mstzb].jpg

#usage ./xml2url.awk <file_of_xml_text
BEGIN {FS="\""}
{print "http://farm"$10".staticflickr.com/"$8"/"$2"_"$6"_[mstzb].jpg"}

解決策2.この解決策は、xmlを編集して置き換えることができることを前提としています

<photo

usage echo x|./xml2urlv2.awk

と交換

/>

何もなしで。

それで

#!/usr/bin/awk -f
# usage echo x|./xml2urlv2.awk  id="7503362468"  owner="59044395@N02"  secret="66b94027db"  server="8423"  farm="9" title="Potluck" ispublic="1"  isfriend="0"  isfamily="0"
#<photo id="7503362468" owner="59044395@N02" secret="66b94027db" server="8423" farm="9" title="Potluck" ispublic="1" isfriend="0" isfamily="0" />
#http://farm{farm-id}.staticflickr.com/{server-id}/{id}_{secret}_[mstzb].jpg
#
{print "http://farm"farm".staticflickr.com/"server"/"id"_"secret"_[mstzb].jpg"}

トリックを行います。

解決策3.この解決策では、スクリプトに何かをエコーする必要がなくなりますが、さらに編集が必要になります。気になる各フィールドの前に-vを付ける必要があります。

#!/usr/bin/awk -f
#<photo id="7503362468" owner="59044395@N02" secret="66b94027db" server="8423" farm="9" title="Potluck" ispublic="1" isfriend="0" isfamily="0" />
#http://farm{farm-id}.staticflickr.com/{server-id}/{id}_{secret}_[mstzb].jpg

#usage: ./xml2urlv.awk -v id="7503362468" -v owner="59044395@N02" -v secret="66b94027db" -v server="8423" -v farm="9" -v title="Potluck" -v ispublic="1" -v isfriend="0" -v isfamily="0"  

BEGIN{print "http://farm"farm".staticflickr.com/"server"/"id"_"secret"_[mstzb].jpg"}
### end of script 

awkを初めて使用する場合は、printステートメント全体を1行にする必要があることに注意してください。また、{はBEGINという単語の行にある必要があります。

于 2012-07-08T21:48:36.953 に答える
0

export次のように、すべての変数をキャッチするために使用できます。

$ export `echo '<photo id="7503362468" owner="59044395@N02" secret="66b94027db" server="8423" farm="9" title="Potluck" ispublic="1" isfriend="0" isfamily="0" />' | sed -n -e 's;";;g'  -e "s;<photo \(.*\) />;\1;p"`
$ echo "http://farm${farm}.staticflickr.com/$server/${id}_${secret}_[mstzb].jpg"
于 2013-05-30T09:00:01.630 に答える