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

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

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

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Q&A

0回答

1623閲覧

Tweetをgoogle map上に表示したいです。

退会済みユーザー

退会済みユーザー

総合スコア0

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

0グッド

0クリップ

投稿2017/03/03 13:30

###行いたいこと
現在地情報がついているツイートをgoogle map上に表示するものを作りたいです。
javascriptを使用しています。
コード内に不必要な文や、おかしい箇所など多々あると思うので修正していただけたら幸いです。

###発生している問題・エラーメッセージ

/**/({"errors":[{"message":"The Twitter REST API v1 is no longer active. Please migrate to API v1.1. https://dev.twitter.com/docs/api/1.1/overview.","code":64}]});と、google chromeのコンソール上にエラーが出てしまいます。

###該当のソースコード

html

1<!DOCTYPE html> 2<html> 3 <head> 4 <meta name="viewport" content="initial-scale=1.0, user-scalable=no" /> 5 <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js"></script> 6 <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jqueryui/1.8.18/jquery-ui.min.js"></script> 7 <!-- 8 <script type="text/javascript" src="./twitter/js/do.js"></script> 9 <script type="text/javascript" src="./twitter/js/notification.js"></script> 10 --> 11 <script src="http://code.jquery.com/jquery-1.8.0.min.js"></script> 12 <style type="text/css" src="./twitter/css/common.css"></style> 13 <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js"></script> 14 <!-- googlemap api 認証 --> 15 <script type="text/javascript" 16 src="http://maps.googleapis.com/maps/api/js?key=AIzaSyAfGJ6jgHJCiPyRc6YhwaL0Y1rIP3t-aSA&libraries=geometry"> 17 </script> 18 19 <style type="text/css"> 20 html { height: 100% } 21 body { height: 100%; margin: 0; padding: 0; background-color: #DDDDDD;font: 20px sans-serif;} 22 #map_canvas { height: 90%; width: 100% } 23 24 </style> 25 26 <script type="text/javascript"> 27 var map, infoWindow, markersHash = {}, markersArray = [], geocoder; 28 29 //緯度経度、半径(km)、ツイートに含めたい文字を指定して、ツイートを取得する。 30 function fetchTweets(latLng, query, radiusKM) { 31 var url = 'http://twitter.com/search?q=place%3A07d9cd6afd884001=?'; 32 var data = { 33 q: query, 34 rpp: 100, 35 geocode: latLng.lat() + ',' + latLng.lng() + ',' + radiusKM 36 }; 37 $.getJSON(url, data, function (data, status) { 38 if (status === 'success') { 39 addTweetsAsMarkers(data); 40 } else { 41 alert('twiter error'); 42 } 43 }); 44 } 45 //マーカーとして未追加で、緯度経度を含むツイートのみ追加する。 46 function addTweetsAsMarkers(data) { 47 var i; 48 for (i = 0; i < data.results.length; i++) { 49 var id = data.results[i].id_str; 50 var geo = data.results[i].geo; 51 if (!markersHash[id] && geo && geo.type === 'Point') { 52 var marker = new google.maps.Marker({ 53 map: map, 54 position: new google.maps.LatLng(parseFloat(geo.coordinates[0]), parseFloat(geo.coordinates[1])), 55 title: '@' + data.results[i].from_user, 56 icon: data.results[i].profile_image_url, 57 result: data.results[i] //情報ウィンドウにツイートを表示するために使う 58 }); 59 google.maps.event.addListener(marker, 'click', function() { 60 //クリックされたmarkerはthisで参照できる。 61 showInfoWindow(this); 62 }); 63 markersHash[id] = marker; 64 markersArray.push(marker); 65 } 66 } 67 } 68 //情報ウィンドウを表示する 69 function showInfoWindow(marker) { 70 marker.setZIndex(9999); //表示位置を一番上にする 71 var linkToTheTweet = '<a target="_blank" href="http://twitter.com/' + marker.result.from_user 72 + '/status/' + marker.result.id_str + '"> 開く </a></p>'; 73 //ツイート内のリンクをクリック可能にする。 74 var text = marker.result.text.replace(/(https?:\/\/[\x21-\x7e]+)/gi, function () { 75 var uri = arguments[1]; 76 return '<a target="_blank" href="' + uri + '">' + decodeURI(uri) + '</a>'; 77 }); 78 infoWindow.content = '<p style="font-size:0.9em;">' + text + '<div style="font-size:0.7em;">' 79 + linkToTheTweet + '</div></p>'; 80 infoWindow.open(map, marker); 81 } 82 //検索する範囲を表示画面の大きさから計算して、ツイートを取得する。 83 function fetchTweetsWithRadius() { 84 var distanceKM = 3.0; 85 var bounds = map.getBounds(); 86 if(bounds) { 87 var latlng = new google.maps.LatLng(bounds.getSouthWest().lat(), bounds.getNorthEast().lng()); 88 var distanceM = google.maps.geometry.spherical.computeDistanceBetween(bounds.getNorthEast(), latlng); 89 distanceKM = Math.floor(distanceM / 2 / 100) / 10; 90 } 91 fetchTweets(map.getCenter(), $('#filter').val(), distanceKM + 'km'); 92 } 93 //ページが読み込み終わったら実行する。 94 function initialize() { 95 var mapOptions = { 96 center: new google.maps.LatLng(35.698619, 139.773288), 97 zoom: 11, 98 mapTypeId: google.maps.MapTypeId.ROADMAP 99 }; 100 map = new google.maps.Map(document.getElementById("map_canvas"), mapOptions); 101 infoWindow = new google.maps.InfoWindow(); 102 //地図内をクリックしたら情報ウィンドウを閉じる 103 google.maps.event.addListener(map, 'click', function () { 104 infoWindow.close(); 105 }); 106 //ドラッグが終わった位置で、ツイートを検索する。 107 google.maps.event.addListener(map, 'dragend', function () { 108 fetchTweetsWithRadius(); 109 }); 110 //ダブルクリックしズームした位置で、ツイートを検索する。 111 google.maps.event.addListener(map, 'dblclick', function () { 112 fetchTweetsWithRadius(); 113 }); 114 fetchTweetsWithRadius(); 115 setInterval(fetchTweetsWithRadius, 30000); //30秒ごとにツイートを検索する。 116 setInterval(showNextTweet, 4000); //4秒ごとに情報ウィンドウを表示する。 117 geocoder = new google.maps.Geocoder(); 118 } 119 120 //追加したマーカーが画面上にあれば情報ウィンドウを表示する。 121 var currentMarker = null; 122 function showNextTweet() { 123 if (currentMarker) { 124 currentMarker.setMap(null); 125 infoWindow.close(); 126 currentMarker = null; 127 } 128 var marker = markersArray.shift(); 129 while (marker) { 130 var bounds = map.getBounds(); 131 //はじめに表示したときには、boundsがundefinedになってしまう。 132 if (!bounds || bounds.contains(marker.getPosition())) { 133 map.panTo(marker.getPosition()); 134 showInfoWindow(marker); 135 currentMarker = marker; 136 return; 137 } else { 138 marker.setMap(null); 139 marker = markersArray.shift(); 140 } 141 } 142 } 143 //地名から緯度経度を取得して、地図を移動させ、ツイートを検索する。 144 function codeAddress() { 145 geocoder.geocode({ 146 'address': $('#address').val() 147 }, function(results, status) { 148 if (status == google.maps.GeocoderStatus.OK) { 149 map.setCenter(results[0].geometry.location); 150 fetchTweetsWithRadius(); 151 } else { 152 alert("Geocode was not successful for the following reason: " + status); 153 } 154 }); 155 } 156 //すべてのマーカーを削除してツイートを検索する。 157 function reload() { 158 var i; 159 for (i = 0; i < markersArray.length; i++) { 160 markersArray[i].setMap(null); 161 } 162 markersArray.length = 0; 163 markersHash = {}; 164 fetchTweetsWithRadius(); 165 } 166 //ツイートをフィルターする文字列をクリアし、ツイートを検索する。 167 function clearFilter() { 168 $('#filter').val(''); 169 reload(); 170 } 171 </script> 172 </head> 173 <body onload="initialize()"> 174 <div style="font-size: 0.5em;"> 175 <fieldset style="float:right;"> 176 <legend>この文字を含むツイートだけ表示</legend> 177 <input type="text" id="filter" value="http://" size="40"> 178 <input type="button" id="reload" value="再表示" onclick="reload();"> 179 <input type="button" id="clear" value="クリア" onclick="clearFilter();"> 180 </fieldset> 181 <fieldset> 182 <legend>地名を指定して移動</legend> 183 <input type="text" id="address" value="新大阪駅" size="60"> 184 <input type="button" value="移動" onclick="codeAddress();"> 185 </fieldset></div> 186 <div id="map_canvas" style="width:100%; height:90%"></div> 187 188 </body> 189</html> 190

###試したこと
TwitterAPI1.1でしか動かないのに、それ以前のバージョンを使用しているためにエラーが出ていると思われます。

###補足情報(言語/FW/ツール等のバージョンなど)
https://takatamajp.wordpress.com/2012/08/28/mapping-tweets-using-jsdo-it-and-google-maps-api/のtakatamaさんのページを参考にさせてもらっています。

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

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

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

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

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

guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問