2017-04-30 5 views
0

特定の文字列が含まれているかどうかを確認するために、特定のYouTube動画のコメントを検索しようとしています。すべてのメソッドが未定義のときにすべてのレコードを照会する方法は?

Yt gemを使用している私のAPIコールは正常です。しかし、応答の収集が遅延ロードされているように見えるので、.allと特定のSQLクエリが機能していないため、私は苦労しています。

質問 - どのように私はパーツ」のような特定の文字列が含まれているそのアイテムのかを確認するためにCommentThreadsコレクションを照会することができます以下

は、私が実行しようとしたいくつかの表現のコンソール出力のですか? 、LIKEクエリを含む:

@video_comments 
=> #<Yt::Collections::CommentThreads:0x007fe626f70120> 


@video_comments.all 
=> NoMethodError: undefined method `all' for #<Yt::Collections::CommentThreads:0x007fe626f70120> 


@video_comments.first.text_display 
=> "Links for the parts in the description! <br /><br />What color do you want?" 


@video_comments.first.text_display.include? "parts" 
=> true 


@video_comments.where('text_display LIKE ?', "%parts%").first 
=> ArgumentError: wrong number of arguments (given 2, expected 0..1) 
from /Users/macbook/.rbenv/versions/2.3.0/lib/ruby/gems/2.3.0/gems/yt-0.28.5/lib/yt/collections/base.rb:37:in `where' 

レール5.0.1 +ルビ2.3.0p0 + PSQL(PostgreSQLの)9.6.1

EDIT:実際の@video_comments応答http://imgur.com/bjkXWfO

+1

あなたは 'to_a'代わりALL''のを試してみましたが、望んでいた要素を直接参照することでしたか? – Bohdan

答えて

0

.allはモデルなどで動作します。 VideoCommentsのモデルをお持ちの場合は、VideoComments.allがすべてのコメントを返します。 あなたの最後のクエリは、自身がアクティブなレコードをしませ@video_comments、あなただけの構文エラーを持って、仕事

@video_comments.where('text_display iLIKE = ?', "%parts%").first 
+0

'ArgumentError:引数の数が間違っています(与えられた2、期待される0..1)' – HashRocketSyntax

0

は、まず試してみてください。だから、あなたは、GoogleによるcommentThreadsによる@video_comments.all

を使用することはできません、応答リターンは次のようにする必要があります:だから

{ 
    "kind": "youtube#commentThread", 
    "etag": etag, 
    "id": string, 
    "snippet": { 
    "channelId": string, 
    "videoId": string, 
    "topLevelComment": comments Resource, 
    "canReply": boolean, 
    "totalReplyCount": unsigned integer, 
    "isPublic": boolean 
    }, 
    "replies": { 
    "comments": [ 
     comments Resource 
    ] 
    } 
} 

、あなたの代わりに、@video_comments.allあなたのコマンドを使用しては次のようになります。

@video_comments.replies.comments 

(成功しない場合は@video_comments["replies"]["comments"]で試してください)

コメントの一覧が返されます。

[OK]をクリックすると、コメントの一覧がフィルタリングされ、その内容の「part」という単語がコメントとして表示されます。

@video_comments.replies.comments.select{|comment| comment.text_display.include? "parts"} 

何かがそうです。

詳細については、以下のリンクを参照してください:

https://developers.google.com/youtube/v3/docs/commentThreads

+0

@Thanh_Tuong実際の応答を見てみましょう:http://imgur.com/bjkXWfOあなたが言及した方法。私は '.items' [items]' '[items"] 'や' snippet'なども試しましたが、それらはすべて未定義のメソッドと呼ばれています – HashRocketSyntax

+1

こんにちは@HashRocketSyntax、この方法を試してください.instance_variable_get( " @#{items} ") –

+0

@Thanh_Tuongあなたの助けをありがとう。' NameError:未定義のローカル変数#のメソッド "items"を参照してください。 – HashRocketSyntax

0

を私は似た何かをしたし、最終的にそれはを参照して作業しました:

video_comments['items'][0]['snippet']['data']['textOriginal']

(これは戻ってきます
一重引用符を使用しないか、引用符なしの[a]を付けないと動作しませんr ['items']

Itemsは、配列とハッシュのネストを含む単一の要素を持つ配列です。私がItems配列全体を検索しようとすると、内部にネストされたハッシュと配列の名前だけが返されました。その内容ではありません。

私は、実際のコンテンツを取得することが分かっ唯一の方法は、私は(この場合には、['textOriginal']でコメントテキスト。

関連する問題