AMcoder - javascript, python, java, html, php, sql

վատ uri google վայրերը heroku սերվերից

Ես ունեմ Google Places API բանալի և կարողացա հաջողությամբ հարցումներ կատարել Google Places API-ին իմ localhost-ից:

Ես Rails 3.1-ում եմ, և երբ ես իմ կայքը տեղափոխեցի Հերոկու, ես վատ խնդրանք եմ ստանում: Ես նկատի ունեմ http google place API-ն և ՈՉ javascript-ը, թեև ես կասկածում եմ, որ խնդիրը նույնն է լինելու (տես ստորև Google-ից ստացված հաղորդագրությունը)

Ահա թե ինչպես է կազմաձևվում իմ հաշիվը Google Console-ում.

Key for browser apps (with referers)
API key:    
XXXXXX
Referers:   
Any referer allowed
Activated on:   Mar 5, 2013 9:41 PM
Activated by:    [email protected]

Ոչ մի խնդիր չկար, երբ ես տեղի հաղորդավարի վրա էի:

Այնուամենայնիվ, երբ ես սեղմում եմ հավելվածը և այնուհետև հարցում եմ անում Google Places-ին, սա այն է, ինչ ես ստանում եմ.

bad URI(is not URI?): https://maps.googleapis.com/maps/api/place/textsearch/json?query=blamp&key=XXXXX&sensor=false&types=restaurant|food|bar|cafe

ԽՄԲԱԳՐԵԼ. Ես մատնանշեցի սխալը «|» գծերի իմ օգտագործման պատճառով: վերջում առանձնացնել google-ի տեսակները։ սակայն սա աշխատում է և՛ երբ ես հարցումը պատճենում/կպցնում եմ իմ բրաուզերի վերնագրում, և երբ ես դա անում եմ լոկալհոստի մշակման ժամանակ: Ցանկացած գաղափար.

1) Ինչու է դա տեղի ունենում: 2) Ինչպե՞ս ուղղել այն:

Ահա, թե ինչպես եմ ես մուտք գործում API Ruby կոդով.

query = URI.escape(params[:search])
        url_params = "json?query="+ query + "&key="+ GOOGLE_API_KEY + "&sensor="+ false.to_s + "&types="+GOOGLE_TYPES.join("|")
        url_params << "&pagetoken="+params[:next_token] if params[:next_token]
        url = URI.parse("https://maps.googleapis.com/maps/api/place/textsearch/"+url_params)


        http = Net::HTTP.new(url.host, url.port)
        http.use_ssl = true
        http.verify_mode = OpenSSL::SSL::VERIFY_NONE
        request = Net::HTTP::Get.new(url.request_uri)

        result = http.request(request)
        JSON.parse(result.body)

Նշում GOOGLE_TYPES-ի վերաբերյալ. սա գլոբալ հաստատուն է, որն իրականում զանգված է. Ես միանում եմ դրան «|»-ով ապա փոխանցեք այն URL-ին:

Խնդիրն այն է, որ երբ ես URI.encode-ում եմ տողը, հարցումը չի վերադարձնում որևէ արդյունք պարզ հարցումների համար, ինչպիսին է «steak house san francisco»-ն, մինչդեռ մինչ URI.encode-ն այդպես էր: Obvs հարցումը դառնում է անօգուտ, եթե այն չի կարող վերադարձնել պատշաճ արդյունքներ, ինչպես դա արեց localhost-ում:


Պատասխանները:


1

Միգուցե դուք պետք է կոդավորեք ձեր URL-ը: Լավ պրակտիկա է` միշտ url-ները կոդավորել հարցումներով և պարամետրերով: Սա կարող է ինչ-որ չափով օգնել. URI::InvalidURIError (վատ URI(URI չէ՞): ) :

Խմբագրել. URL-ի նշանը «|» կարող է անվտանգ չլինել, հետևաբար պետք է url-կոդավորել նման հարցումները:

Փորձեք այս:

def search_google_places
  api_key = 'xxx'
  base_url = 'https://maps.googleapis.com/maps/api/place/textsearch/json?key=' + api_key
  tail_url = '&query=garena&sensor=false&types=restaurant|food|bar|cafe'
  main_url = base_url + api_key + tail_url
  url = URI.parse(URI.encode(main_url))
  response = Net::HTTP.start(url.host, use_ssl: true, verify_mode: 
OpenSSL::SSL::VERIFY_NONE) do |http|
     http.get url.request_uri
  end

  case response
     when Net::HTTPRedirection
        # repeat the request using response['Location']
     when Net::HTTPSuccess
        outputData = JSON.parse response.body
     else
        # response code isn't a 200; raise an exception
        pp response.error!
     end
     return outputData
end
05.04.2013
  • Սա իրականում փոխանցում է խորհրդանիշը, բայց այնուհետև, երբ ես գործարկում եմ հարցումը, այն ոչ մի արդյունք ցույց չի տալիս այն հարցումների վրա, որոնք հաջող էին մինչև կոդավորումը: Թույլ տվեք բացատրել. localhost-ում ես չեմ կոդավորել տողը կամ քերթել այն: Որոնման հարցումը վերադարձրեց բոլոր տեսակի վավեր արդյունքներ: Այժմ, երբ ես գործարկում եմ հարցումը կոդավորումից հետո, որոնումը հայտնվում է դատարկ: 05.04.2013
  • Կարո՞ղ եք ավելի շատ մանրամասներ տրամադրել այն մասին, թե ինչպես եք մուտք գործում api ռուբի կոդի միջոցով: Թերևս դա ռուբինի հետ կապված խնդիր է: 05.04.2013
  • Ես թարմացրել եմ իմ պատասխանը, կարող եք օգտագործել URI.parse(URI.encode(xxxx)) 05.04.2013
  • Նոր նյութեր

    Օգտագործելով Fetch Vs Axios.Js-ը՝ HTTP հարցումներ կատարելու համար
    JavaScript-ը կարող է ցանցային հարցումներ ուղարկել սերվեր և բեռնել նոր տեղեկատվություն, երբ դա անհրաժեշտ լինի: Օրինակ, մենք կարող ենք օգտագործել ցանցային հարցումը պատվեր ներկայացնելու,..

    Տիրապետել հանգստության արվեստին. մշակողի ուղեցույց՝ ճնշման տակ ծաղկելու համար
    Տիրապետել հանգստության արվեստին. մշակողի ուղեցույց՝ ճնշման տակ ծաղկելու համար Ինչպե՞ս հանգստացնել ձեր միտքը և աշխատեցնել ձեր պրոցեսորը: Ինչպես մնալ հանգիստ և զարգանալ ճնշման տակ...

    Մեքենայի ուսուցում բանկային և ֆինանսների ոլորտում
    Բարդ, խելացի անվտանգության համակարգերը և հաճախորդների սպասարկման պարզեցված ծառայությունները բիզնեսի հաջողության բանալին են: Ֆինանսական հաստատությունները, մասնավորապես, պետք է առաջ մնան կորի..

    Ես AI-ին հարցրի կյանքի իմաստը, այն ինչ ասում էր, ցնցող էր:
    Այն պահից ի վեր, երբ ես իմացա Արհեստական ​​ինտելեկտի մասին, ես հիացած էի այն բանով, թե ինչպես է այն կարողանում հասկանալ մարդկային նորմալ տեքստը, և այն կարող է առաջացնել իր սեփական արձագանքը դրա..

    Ինչպես սովորել կոդավորումը Python-ում վագրի պես:
    Սովորելու համար ծրագրավորման նոր լեզու ընտրելը բարդ է: Անկախ նրանից, թե դուք սկսնակ եք, թե առաջադեմ, դա օգնում է իմանալ, թե ինչ թեմաներ պետք է սովորել: Ծրագրավորման լեզվի հիմունքները, դրա..

    C++-ի օրական բիթ(ե) | Ամենաերկար պալինդրոմային ենթաշարը
    C++ #198-ի ամենօրյա բիթ(ե), Ընդհանուր հարցազրույցի խնդիր. Ամենաերկար պալինդրոմային ենթատող: Այսօր մենք կանդրադառնանք հարցազրույցի ընդհանուր խնդրին. Ամենաերկար palindromic substring...

    Kydavra ICAReducer՝ ձեր տվյալների ծավալայինությունը նվազեցնելու համար
    Ի՞նչ է ICAReducer-ը: ICAReducer-ն աշխատում է հետևյալ կերպ. այն նվազեցնում է նրանց միջև բարձր փոխկապակցված հատկանիշները մինչև մեկ սյունակ: Բավականին նման է PCAreducer-ին, չնայած այն..