-1

GoogleプレイスAPIを試しましたが、「formatted_phone_number」または「international_phone_number」の場所に電話が返されます。

ただし、すべての場所で返されるわけではありません(100か所に1つだけ)。しかし、現在、私は各場所の電話番号を取得したいと思っています(例:-ホテル)。

緯度と経度の情報をAPIに送信し、最寄りのホテルの住所と電話番号も返す必要があります。

このためのより良いAPIを提案してください。

4

1 に答える 1

2

Places APIから受信できるデータ(電話番号など)の品質は、そのAPIをバックアップするデータの品質に完全に依存します。これはベンダーごとに異なり、カバレッジは国ごと、都市ごとなどに異なります。

ここでの最善の策は、ある種の「美人コンテスト」を実行して、どのベンダーがあなたに関連する最高のデータセットを保持しているかを把握することです。

たとえば、Nokia RESTful Places APIを使用して場所の電話番号を取得するには、次の2段階のプロセスが必要です。

  • 一般的なカテゴリクエリを作成します(例: 「ムンバイ」の近くの「ホテル」)

http://places.nlp.nokia.com/places/v1/discover/search?at=18.975%2C72.825833&q=hotel&tf=plain&pretty=y&size=10&app_id=_peU-uCkp-j8ovkzFGNU&app_code=gBoUkAMoxoqIWfxWA5DuMQ

  • placeIdを取得し、 contacts.phoneなどの詳細情報を照会します

http://places.nlp.nokia.com/places/v1/places/356te7gc-e5c2e62e24254695b4e41c7762ded586;context=Zmxvdy1pZD03NTAwNzM3ZS1mZmEwLTU0ZDgtYjBkZC1lYjgwMDZmMGE2NDBfMTM1OTcwODg5MDQzNl8wXzU2ODAmcmFuaz0x?app_id=_peU-uCkp-j8ovkzFGNU&app_code=gBoUkAMoxoqIWfxWA5DuMQ

繰り返しますが、すべての場所に電話情報が含まれるわけではありません。これで、最初のリクエストからの応答をチェーンして、受信したplaceIdをループし、電話番号を画面に表示できます。

別の方法は、既存のJavaScript APIラッパーを使用して、以下のコードに示すように情報を表示することです。これを機能させるには、独自のアプリIDとトークンが必要です

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<!-- 
    Example from Nokia Maps API Playground, for more information visit http://api.maps.nokia.com
 -->
<html xmlns="http://www.w3.org/1999/xhtml">
    <head>
        <meta http-equiv="X-UA-Compatible" content="IE=7; IE=EmulateIE9"/>
        <meta http-equiv="content-type" content="text/html; charset=UTF-8"/>
        <title>Nokia Maps API Example: Search by category</title>
        <meta name="description" content="Search by category"/>
        <meta name="keywords" content="search, services, places, category"/>
        <!-- For scaling content for mobile devices, setting the viewport to the width of the device-->
        <meta name=viewport content="width=device-width, height=device-height, initial-scale=1.0, maximum-scale=1.0, user-scalable=no"/>
        <!-- By default we add ?with=all to load every package available, it's better to change this parameter to your use case. Options ?with=maps|positioning|places|placesdata|directions|datarendering|all -->
        <script type="text/javascript" charset="UTF-8" src="http://api.maps.nokia.com/2.2.3/jsl.js?with=all"></script>
        <!-- JavaScript for example container (NoteContainer & Logger)  -->
        <style type="text/css">
            html {
                overflow:hidden;
            }

            body {
                margin: 0;
                padding: 0;
                overflow: hidden;
                width: 100%;
                height: 100%;
                position: absolute;
            }

            #mapContainer {
                width: 40%;
                height: 80%;
                left: 0;
                top: 0;
                position: absolute;
            }
            #progress {
                width: 80%;
                height: 10%;
                left: 0;
                top: 80%;
                position: absolute;
            }
            #buttons {
                width: 80%;
                height: 10%;
                left: 0;
                top: 90%;
                position: absolute;
            }
        </style>
    </head>
    <body>
        <div id="mapContainer"></div>
        <div id="progress"></div>
        <div id="buttons">
         <a onClick="searchByCategory( map.center, 'bookshop' );return false;" href="#">Find Hotels</a> 
          <div style="display:block">
         <div id="csPlaceWidget" style="display:none"></div>
         </div>

        </div>

        <script type="text/javascript" id="exampleJsSource">
/*  Set authentication token and appid 
*   WARNING: this is a demo-only key
*   please register on http://api.developer.nokia.com/ 
*   and obtain your own developer's API key 
*/
nokia.Settings.set("appId", "My App Id"); 
nokia.Settings.set("authenticationToken", "My Token");


// Get the DOM node to which we will append the map
var mapContainer = document.getElementById("mapContainer");
var infoBubbles = new nokia.maps.map.component.InfoBubbles();   

// Create a map inside the map container DOM node
var map = new nokia.maps.map.Display(mapContainer, {
    // Initial center and zoom level of the map
    center: [18.975, 72.825833],
    zoomLevel: 10,
    components: [ infoBubbles,      
        new nokia.maps.map.component.Behavior()
    ]
});

var searchManager = nokia.places.search.manager,
    resultSet;


var defaultHandler = function (evt) {
    console.log(evt.target);
    infoBubbles.openBubble('<h3>' +evt.target.title + '</h3>' + evt.target.vicinity + '<br/>'
    + '<a onclick="getPhoneNumber(\'' + evt.target.placeId +'\')" >Get Phone</a>' ,evt.target.position)
};      

var myData;
var searchCat;  
var maxDistance = 0;


var getPhoneNumber = function (placeId){

    nokia.places.manager.getPlaceData({
            placeId: placeId,
            basicInfo: true,
            onComplete: function (data, status) {
                if ( data.contacts.phone === undefined ){
                    alert ("Unknown");
                } else {
                    alert(data.contacts.phone[0].value);
                }
            }
        });
};

// Function for receiving search results from places search and process them
var processResults = function (data, requestStatus, requestId) {
    var i, len, locations, marker;

    myData = data;

    if (requestStatus == "OK") {
        // The function findPlaces() and reverseGeoCode() of  return results in slightly different formats
        locations = data.results ? data.results.items : [data.location];
        // We check that at least one location has been found
        if (locations.length > 0) {
            // Remove results from previous search from the map
            if (resultSet) map.objects.remove(resultSet);
            // Convert all found locations into a set of markers
            resultSet = new nokia.maps.map.Container();
            for (i = 0, len = locations.length; i < len; i++) {
                marker = new nokia.maps.map.StandardMarker(locations[i].position, { text: i+1 });
                marker.title = locations[i].title;
                marker.position = locations[i].position;
                marker.vicinity = locations[i].vicinity;
                marker.placeId = locations[i].placeId;
                marker.addListener("click", defaultHandler);
                resultSet.objects.add(marker);
                if (locations[i].distance > maxDistance){
                    maxDistance = locations[i].distance;
                }
            }
            // Next we add the marker(s) to the map's object collection so they will be rendered onto the map
            map.objects.add(resultSet);
            // We zoom the map to a view that encapsulates all the markers into map's viewport
            map.zoomTo(resultSet.getBoundingBox(), false);


            progressUiElt.innerHTML = locations.length  + " places found in the '" + searchCat + "' category within " + maxDistance + "m of "+ data.search.location.address.city ;
        } else { 
            alert("Your search produced no results!");
        }
    } else {
        alert("The search request failed");
    }
};



// Binding of DOM elements to several variables so we can install event handlers.
var progressUiElt = document.getElementById("progress");


searchByCategory = function(searchCenter   , category){
// Make a place search request
searchCat = category;
progressUiElt.innerHTML = "Looking for places in the '" + category + "' category...'";
searchManager.findPlacesByCategory({
    category: category,
    onComplete: processResults,
    searchCenter: searchCenter,
    limit: 100,
});
}
// Search for Hotels in Mumbai
searchByCategory( new nokia.maps.geo.Coordinate(18.975, 72.825833), "hotel" );

        </script>
    </body>
</html>

JavaScriptAPIからのデータを以下に示します。

ムンバイのホテル

電話番号については、利用規約の制限事項にご注意ください

(ii)本契約で明示的に許可されている場合を除き、コンテンツまたはその一部の派生物(データベースの作成または寄稿を含む)をコピー、翻訳、変更、または作成したり、公に表示したりしないでください。たとえば、次のことは禁止されています。...(iii)コンテンツに基づいてメーリングリストまたはテレマーケティングリストを作成する。または(iv)コンテンツをサードパーティのロケーションベースのプラットフォームまたはサービスにエクスポート、書き込み、または保存する。

于 2013-02-01T09:10:50.370 に答える