Ruby on Rails
Sunday, February 3, 2019
On Sunday, February 3, 2019 at 9:54:25 PM UTC-5, Walter Lee Davis wrote:
> On Feb 3, 2019, at 7:14 PM, fugee ohu <fuge...@gmail.com> wrote:
>
>
>
> On Wednesday, January 30, 2019 at 5:16:59 PM UTC-5, Colin Law wrote:
> On Wed, 30 Jan 2019 at 22:12, Colin Law <cla...@gmail.com> wrote:
> >
> > On Wed, 30 Jan 2019 at 22:09, fugee ohu <fuge...@gmail.com> wrote:
> > >
> > >
> > >
> > > On Wednesday, January 30, 2019 at 5:02:17 PM UTC-5, Colin Law wrote:
> > >>
> > >> On Wed, 30 Jan 2019 at 21:56, fugee ohu <fuge...@gmail.com> wrote:
> > >> > ...
> > >> > Everything in the unparsed resonse body that I want is between [ and ] I have to gsub it out
> > >>
> > >>
> > >> No you don't. After you get parsed_obj["results] (which is an array,
> > >> that's what the [] mean) then you can get the first product by
> > >> parsed_obj["results"][0]["productId"]
> > >> It is just an array. You have met ruby arrays haven't you?
> > >>
> > >> I am rapidly losing the will to live.
> > >>
> > >> Colin
> > >
> > >
> > > The response body isn't JSON.parse parsable as is it has to be gsub'd and chomped first before I can run JSON.parse My original gsub wasn't right it wasn't removing the end that follows ]
> > > JSON::ParserError: 784: unexpected token at 'myscript.js({"success":true,"code
> >
> > You previously posted that you had got parsed_obj where
> > parsed_obj["results] was an array. Go back to that.
>
> To quote your previous message
>
> >puts parsed_obj["results"] shows the entire results but `puts parsed_obj["results"]["productId"] gets me error no implicit
> > conversion of String into Integer
>
> The error is because it is an array, which is perfectly obvious if you
> look at the unparsed string. So if you use
> parsed_obj["results"][0]
> you will get the first element
>
> Colin
>
> There are scripts in the browser page source that pass a lot of useful values like this
> <script type="text/javascript">
> if(!window.runParams) {
> window.runParams = {};
> }
> window.runParams.minPrice="44.98";
> window.runParams.maxPrice="44.98";
> ...
> And more within definitions in the same script like this
> var skuProducts=[{"skuAttr":"14:1052","skuPropIds":"1052"," skuVal":{"actSkuCalPrice":"20. 24"," actSkuMultiCurrencyCalPrice":" 20.24"," actSkuMultiCurrencyDisplayPric e":"20.24","availQuantity":29, "inventory":30,"isActivity": true,"skuCalPrice":"44.98"," skuMultiCurrencyCalPrice":"44. 98"," skuMultiCurrencyDisplayPrice": "44.98"}},{"skuAttr":"14:173", "skuPropIds":"173","skuVal":{" actSkuCalPrice":"20.24"," actSkuMultiCurrencyCalPrice":" 20.24"," actSkuMultiCurrencyDisplayPric e":"20.24","availQuantity":26, "inventory":30,"isActivity": true,"skuCalPrice":"44.98"," skuMultiCurrencyCalPrice":"44. 98"," skuMultiCurrencyDisplayPrice": "44.98"}}];
> var GaData = {
> pageType: "product",
> productIds: "en32837801078",
> totalValue: "US $20.24"
> };
>
> Since it's in <script> containers in page source can I parse it?
Since it's in a <script> tag, you can use Nokogiri or another HTML parser to extract only that bit of the page. To be sure, you will have to do some work on the script before you can access the parts you're interested in as JSON. But JSON is the same whether it is being parsed by JavaScript or Ruby. You're going to have to work out the best way to identify the parts you want. There's no such thing as a JavaScript parser in Ruby, but if you can figure out where to start, and how to get the offsets to trim your starting code, the parts that look interesting above will be interesting to Ruby, too.
I'm assuming you don't have control over this page, and that you are doing some sort of scraping exercise here. So you'll need to have lots of tests around whatever code you write, and keep checking often, because the owner of this code may change its fundamental structure at a moment's notice.
Walter
Yes So if there's scripts in the source document html embedded in <script> containers what Name are they given in the Network->JS in dev tools? I'm interested in var skuProducts a large javascript array within the <script> containers This array should be the response from one of the scripts in Network->JS also? Would be so easy to parse it from the <script> containers but somehow I don't think that's what I'm supposed to do I'm supposed to be calling the javascripts and parsing the responses
You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group.
To unsubscribe from this group and stop receiving emails from it, send an email to rubyonrails-talk+unsubscribe@googlegroups.com.
To post to this group, send email to rubyonrails-talk@googlegroups.com.
To view this discussion on the web visit https://groups.google.com/d/msgid/rubyonrails-talk/12580e27-bce4-47af-bb99-2ea314746b38%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.
Subscribe to:
Post Comments (Atom)
No comments:
Post a Comment