のRails 4.2のdevの環境わからないクリーンアップ&Iは、コントローラ<code>Searches</code>を持っている私の、一見難しい解析されたJSONレスポンス
を使用する方法:コントローラはClass_name
クラスオブジェクトのために使用しています
def index
@search_term = params[:s] || 'shoes'
@listings = Class_name.for(@search_term)
end
モデル&オブジェクト際に使用for
方法:
class Class_name
include HTTParty
base_uri 'http://svcs.ebay.com/services/search/FindingService/v1?SERVICE-NAME=FindingService&OPERATION-NAME=findItemsByKeywords&SERVICE-VERSION=1.13.0&SECURITY-APPNAME=xxxx&RESPONSE-DATA-FORMAT=JSON&REST-PAYLOAD&GLOBAL-ID=EBAY-US&paginationInput.entriesPerPage=25&paginationInput.pageNumber=1'
format :json
def self.for term
get("", query: { keywords: term})["findItemsByKeywordsResponse"]
end
end
最後に、ビュー - 私は表示するテーブルを作成しますeBayのAPIからの解析された応答。
<table border="1">
<tr>
<th>Image</th>
<th>Name</th>
</tr>
<% @listings.each do |product| %>
<tr>
<td><%= image_tag(product["searchResult"][0]["item"][0]["galleryURL"])%></td>
<td><%= product["searchResult"][0]["item"].sample(25) %></td>
</tr>
<% end %>
</table>
私の質問は、モデルとビューです。管理するために、私はbase_uri
限りと簡単に持っていないために - - モデルの場合
default_params
HTTPartyメソッドを追加しようとしましたが、私は書くだろうというとき:
default_params SERVICE-NAME: "FindingService", OPERATION-NAME: "#{operation}" ,etc ,etc
は、それは私にエラーを与えるだろう基本的にのシンボルは定数 "SERVICE-NAME"にできませんが、apiのパラメータは大文字である必要があります/である必要があります。
割り当てられた値がある場合、定数をハッシュ/シンボルと見なすことができないのはなぜですか?大会で事前に割り当てられた価値があると予想されるので、私は推測していますか?
これらの値を、私が今やっているよりも安全な方法で割り当てることはできますか?記号として使用できないのですか? - >>> Starbellyによって回答しました。
また、ユーザーがリダイレクトを行ったかどうかを考慮して、自分のアプリIDを隠すことにメリットがありますか?そうでない場合は、リダイレクトに従う必要はありませんか?
代わりにアフィリエイトIDはどうですか?私は確かに、アフィリエイトIdに、信用を得るために誰かをトラフィックのリンクにリダイレクトするURLの中にとどめる必要があるだろう。
ビューの質問に: これは本当に私にトラブルを与えている部分です。
モデルコードで、あなたがself.for(term)
メソッドを参照してくださいので、それは、キーワードを照会するために、あなたがそれを与えるのparamに取り、それは私がしたいfindItemsByKeywordsResponse
名前付きの値のJSON
フォーマットされた表になり、検索&に必要なPARAMアクセス。それはアイテムの次の配列を繰り返し、上記のコードの最後のコンマの後
{
findItemsByKeywordsResponse: [
{
ack: [
"Success"
],
version: [
"1.13.0"
],
timestamp: [
"2016-07-11T01:33:40.002Z"
],
searchResult: [
{
@count: "25",
item: [
{
itemId: [
"351198621254"
],
title: [
"Black PU Leather High Back Office Chair Executive Task Ergonomic Computer Desk"
],
globalId: [
"EBAY-US"
],
subtitle: [
"Ship from IN & CA ! Delivery in 1-3 Days US 48 States !"
],
primaryCategory: [
{
categoryId: [
"61677"
],
categoryName: [
"Chairs"
]
}
],
secondaryCategory: [
{
categoryId: [
"54235"
],
categoryName: [
"Chairs"
]
}
],
galleryURL: [
"http://thumbs3.ebaystatic.com/m/mBdjVHSC7hWaSBl-4Ku69aA/140.jpg"
],
viewItemURL: [
"http://www.ebay.com/itm/Black-PU-Leather-High-Back-Office-Chair-Executive-Task-Ergonomic-Computer-Desk-/351198621254"
],
paymentMethod: [
"PayPal"
],
autoPay: [
"true"
],
postalCode: [
"91748"
],
location: [
"Rowland Heights,CA,USA"
],
country: [
"US"
],
shippingInfo: [
{
shippingServiceCost: [
{
@currencyId: "USD",
__value__: "0.0"
}
],
shippingType: [
"Free"
],
shipToLocations: [
"US"
],
expeditedShipping: [
"true"
],
oneDayShippingAvailable: [
"false"
],
handlingTime: [
"0"
]
}
],
sellingStatus: [
{
currentPrice: [
{
@currencyId: "USD",
__value__: "99.99"
}
],
convertedCurrentPrice: [
{
@currencyId: "USD",
__value__: "99.99"
}
],
sellingState: [
"Active"
],
timeLeft: [
"P26DT23H9M53S"
]
}
],
listingInfo: [
{
bestOfferEnabled: [
"false"
],
buyItNowAvailable: [
"false"
],
startTime: [
"2014-10-17T00:43:32.000Z"
],
endTime: [
"2016-08-07T00:43:32.000Z"
],
listingType: [
"FixedPrice"
],
gift: [
"false"
]
}
],
returnsAccepted: [
"true"
],
condition: [
{
conditionId: [
"1000"
],
conditionDisplayName: [
"New"
]
}
],
isMultiVariationListing: [
"false"
],
discountPriceInfo: [
{
originalRetailPrice: [
{
@currencyId: "USD",
__value__: "209.99"
}
],
pricingTreatment: [
"STP"
],
soldOnEbay: [
"false"
],
soldOffEbay: [
"false"
]
}
],
topRatedListing: [
"true"
]
},
:椅子の検索
、 始まるコードは次のようになります。 ["item"] [1]を上記のJSONと同じ属性で置き換えます。
コードがいくつかありますが、すべてのネスティングはこの部分と似ています。 これまでのコードでは、モデルのbase_uriパラメータに表示されているような個別の項目が1つだけ表示されています& &ビューでは、各ページに25個の項目がページされます。& 25個の項目が表示されます。
私はこの情報に個別にアクセスすることを認識しており、商品ごとに["title"]
などの情報にアクセスするには、["item"][0], ["item"][1],
などのアイテム配列にアクセスする必要があります。
そして私は上記の方法でコードをテストしたこともあり、そうすると(product["searchResult"][0]["item"][0]["title"]
)製品ごとにテーブルにタイトル値を置くことができますが、フォーマットは正しく行われません。 - 私のビューファイルにコード化されたテーブル内のレンダリング値、すべての周りのアレイブロックと引用符で
["Black PU Leather High Back Office Chair Executive Task Ergonomic Computer Desk"]
: 実際の値は、このように、アレイから現れます。
どのように配列/ハッシュから「真の」値を抽出するのですか? - 配列ブロックのコードと引用符を取り除く
また、モデルファイルのbase_uriコードに見られるように、リスティングは、get要求時にページあたり25個の製品の結果で自動的に改ページされます。この&事前に定義し、これを知っ
、どのように私は、反復処理と["searchResult"][0]["item"][1..25]
title
値& galleryURL
値のすべての25の値にアクセスできますか? &もう一度。各値の周囲には[ ]
と""
がなくなります。
コード私は25の["item"]
配列値をサンプリングし、今使用していますが、基本的には私はこのすべてを把握しようとしてきた一方で、私はfindItemsKeywordsResponse
JSON
テーブルから以前の投稿正確なコードをレンダリングしています。
これについてのヘルプは非常に非常に高く評価されます。
また、上記の配列値を25 ["item"]
でサンプリングしても、1つの行に25個のサンプルがすべてレンダリングされます。ハッシュロケット使用
:あなたの最初の質問に答えるために
ようこそスタックオーバーフロー。 "[ask]"とリンク先ページ、 "[mcve]"をお読みください。あなたの質問は長いです。問題を説明するのに必要な最小限に抑えてください。それ以外のものは、あなたがそれを見渡し、あなたが書いたことを理解しようとするとき、あなたのための助けを遅らせる。また、「編集」や「更新」を使用せず、変更を最初に置いたようにテキストに組み込んでください。 –
私は執筆が長いことを理解していますが、それは複数の部分の質問です。私は質問を整理した塊に分けました。 私はこれが基本的に理解するのに重要な概念だと思うし、あまりにも重すぎて応答が少ない場合、応答する人は本質的に役立つでしょう。 ありがとうございました! – Henny
JSONをインデントして読みやすくするのはどうですか? –