質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Magento

Magentoはオープンソースでも業務用のライセンスでも取得することができるZend Frameworkベースで作られたeコマースのプラットフォームです。

Q&A

解決済

2回答

377閲覧

Rubyに文字列が配列として扱われる

yuki_90453

総合スコア326

Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Magento

Magentoはオープンソースでも業務用のライセンスでも取得することができるZend Frameworkベースで作られたeコマースのプラットフォームです。

0グッド

0クリップ

投稿2018/11/14 01:15

編集2018/11/14 07:39

###経緯

APIのURLが下記のようになっているのですが、配列として扱われエラーになってしまいます。

"localhost/rest/default/V1/products?searchCriteria[filter_groups][0][filters][0][field]=type_id&searchCriteria[filter_groups][0][filters][0][value]=configurable&searchCriteria[filter_groups][0][filters][0][condition_type]=eq"

エラー内容:No implicit conversion of String into Integer (TypeError)

Postmanというアプリで問題なくデータの取得を出来ます。

###試したこと
1) .to_sメソッドを使用して文字列に変換してみましたが挙動は変わりません。

  1. 下記のようにパラメータに載せる形に変更してみましたが、エラーになります。
{:params => {'searchCriteria[filter_groups][0][filters][0][field]' => 'type_id', 'searchCriteria[filter_groups][0][filters][0][value]' => 'configurable', 'searchCriteria[filter_groups][0][filters][0][condition_type]' => 'eq'}, :headers => {'Content-Type' => 'application/json'}}

###質問
書き方に誤りがあるのでしょうか?
アドバイスお願い致します。

###追記

Client_magento = OAuth2::Client.new(nil, nil, site: 'http://localhost') Access_token_magento = OAuth2::AccessToken.new Client_magento, 'digki8lgx3i79pbhpbafnq5mp5e4g3o0' 1) コード api_url = "rest/default/V1/products?searchCriteria[filter_groups][0][filters][0][field]=type_id&searchCriteria[filter_groups][0][filters][0][value]=configurable&searchCriteria[filter_groups][0][filters][0][condition_type]=eq" data = Access_token_magento.get(api_url) 1) 実行結果 # `[]': no implicit conversion of String into Integer (TypeError) 2) コード api_url = "rest/default/V1/products?searchCriteria[filter_groups][0][filters][0][field]=type_id&searchCriteria[filter_groups][0][filters][0][value]=configurable&searchCriteria[filter_groups][0][filters][0][condition_type]=eq" data = Access_token_magento.get(api_url, :header => {'Content-Type' => 'application/json'}) 2) 実行結果 # `[]': no implicit conversion of String into Integer (TypeError) 3) コード data = Access_token_magento.get("rest/default/V1/products", {:parameters => {'searchCriteria[filter_groups][0][filters][0][field]' => 'type_id', 'searchCriteria[filter_groups][0][filters][0][value]' => 'configurable', 'searchCriteria[filter_groups][0][filters][0][condition_type]' => 'eq' }}).parsed 3) 実行結果 # undefined method `bytesize' for 4) コード # data = Access_token_magento.get("rest/default/V1/products", {:parameters => {:fieldName => {:searchCriteria[filter_groups][0][filters][0][field] => 'type_id',:searchCriteria[filter_groups][0][filters][0][value] => 'configurable', :searchCriteria[filter_groups][0][filters][0][condition_type] => 'eq' }}}).parsed 4) 実行結果 {"message":"%fieldName is a required field.","parameters"{"fieldName":"searchCriteria"} 5) コード data = access_token_magento.get(api_url,{"fieldName":{"searchCriteria[filter_groups][0][filters][0][field]": "type_id", "searchCriteria[filter_groups][0][filters][0][value]": "configurable", "searchCriteria[filter_groups][0][filters][0][condition_type]": "eq" }}).parsed 5) エラー {"message":"%fieldName is a required field.","parameters":{"fieldName":"searchCriteria"},"

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ベストアンサー

Faradayのbugっぽい仕様をoauth2が踏んでるっぽいです。

rb

1# Client_magento = OAuth2::Client.new(nil, nil, site: 'http://httpbin.org') 2# Access_token_magento = OAuth2::AccessToken.new Client_magento, '0'; 3# uri = "get" 4uri = "rest/default/V1/products" 5pms = { 6 'searchCriteria[filter_groups][0][filters][0][field]' => 'type_id', 7 'searchCriteria[filter_groups][0][filters][0][value]' => 'configurable', 8 'searchCriteria[filter_groups][0][filters][0][condition_type]' => 'eq' 9} 10data = Access_token_magento.get("get", headers: {'Content-Type' => 'application/json'}){|req| req.params.update(pms) }.parsed 11p data

投稿2018/11/14 10:23

編集2018/11/14 11:02
asm

総合スコア15147

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

yuki_90453

2018/11/14 10:30

解答頂きありがとうございます。 試してみたのですが、返答が膨大なHTMLで帰ってきます。エラー内容についても、量が多すぎて特定出来ません。 スクリプト自体はexit 1で戻って来ているのでエラーのようです。 :header => {'Content-Type' => 'application/json'}を付与したいのですが、reqの部分どのようにすればいいでしょうか? よろしくお願い致します。
asm

2018/11/14 11:02

修正しときました
guest

0

ruby

1'localhost/rest/default/V1/products?searchCriteria[filter_groups][0][filters][0][field]=type_id&searchCriteria[filter_groups][0][filters][0][value]=configurable&searchCriteria[filter_groups][0][filters][0][condition_type]=eq' 2#=> "localhost/rest/default/V1/products?searchCriteria[filter_groups][0][filters][0][field]=type_id&searchCriteria[filter_groups][0][filters][0][value]=configurable&searchCriteria[filter_groups][0][filters][0][condition_type]=eq" 3 4{:params => {'searchCriteria[filter_groups][0][filters][0][field]' => 'type_id', 'searchCriteria[filter_groups][0][filters][0][value]' => 'configurable', 'searchCriteria[filter_groups][0][filters][0][condition_type]' => 'eq'}, :headers => {'Content-Type' => 'application/json'}} 5#=> {:params=>{"searchCriteria[filter_groups][0][filters][0][field]"=>"type_id", "searchCriteria[filter_groups][0][filters][0][value]"=>"configurable", "searchCriteria[filter_groups][0][filters][0][condition_type]"=>"eq"}, :headers=>{"Content-Type"=>"application/json"}}

当然ですが、特にエラーは見られません。
実際にエラーの起きたコードを載せてください。

追記:
オプションで指定するべき部分までURLに含めているからでしょう。
Class: OAuth2::AccessToken

投稿2018/11/14 05:18

編集2018/11/14 07:22
退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

yuki_90453

2018/11/14 06:12

追記で追加致しましたのでご確認お願い致します。
yuki_90453

2018/11/14 07:24

編集確認致しました、追記の4番ではURLではなくパラメータで追加する形を取っていますがエラーになります。
退会済みユーザー

退会済みユーザー

2018/11/14 07:34 編集

3番はエラー箇所が不明でそもそも意図したキーではなさそうですし、 4番はキーそのものがすでにエラーを起こしそうなんですが...
yuki_90453

2018/11/14 07:38

内容、下記に変更してみましたが、同じエラーでした。 5) コード data = access_token_magento.get(api_url,{"fieldName":{"searchCriteria[filter_groups][0][filters][0][field]": "type_id", "searchCriteria[filter_groups][0][filters][0][value]": "configurable", "searchCriteria[filter_groups][0][filters][0][condition_type]": "eq" }}).parsed 5) エラー {"message":"%fieldName is a required field.","parameters":{"fieldName":"searchCriteria"}," パラメータの書き方が間違っているのでしょうか? 怪しい部分があればご指摘いただけないでしょうか?
退会済みユーザー

退会済みユーザー

2018/11/14 07:59 編集

まずキーそのものが何をしたいのかが不明です。例えば "searchCriteria[filter_groups][0][filters][0][field]" というキーを用意したいのか(その場合はできない) searchCriteria[filter_groups][0][filters][0][field] の値をキーとしたいのか(その場合は書き方が違う) searchCriteria: { filter_groups: { filters: { field: "type_id" }}} としたかったのか...
yuki_90453

2018/11/14 08:10

これらのキーで商品一覧を取得することができます。 これらの値は検索条件になりなります。 下記のように検索条件なしだと問題なく取得できます。 data = access_token_magento.get(api_url,{"params":{"searchCriteria":"0"}}).parsed
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問