ハッカソン・アイデアソン成果の共有と
ビジネス化支援・人材情報の統合サイト
ログイン
Language
powered by
言語設定
x
English
日本語 [Japanese]
ホーム
初めての方へ
チュートリアル
事例紹介
マイページ
新規作成
このページをwebで検索
ツイート
localwiki
プラグイン
App
LocalWikiプラグインの作成方法
Tetsuro_Toyoda
メッセージ送信
ページの編集に参加
ライセンス
:
LinkDataに登録されたスポットをLocalWikiに対応付けるプラグインの作り方を解説します。LocalWikiは地域のスポットについて誰でも自由に記述できるページです。
更新: 2015年1月27日
0
評価指標
いいね!
このページにポストする
埋め込みコードを取得
埋め込みガジェットの設定
height
px
language
English
日本語 [Japanese]
View
Detail
Summery
size
プレビュー
このコードをコピーして、あなたのwebサイトのHTMLに貼り付けてください。
画像
詳細
これまでは、市民が作成したLocalWikiページと、自治体が公開するオープンデータの間で、関連付けがありませんでした。このため、自治体のオープンデータを使って作成されたアプリからLocalWikiのコンテンツを使うことが難しい状況でした。
更新: 2015年1月27日
(
Tetsuro_Toyoda
)
画像
詳細
このプラグインを使えば、LinkDataに登録されたスポットをLocalWikiのページのURLに網羅的に対応付けて記述を開始することができます。自治体が公開しているオープンデータをLinkDataに登録すれば、市民がこのプラグインを使って各スポットの紹介やおすすめ情報を紹介するLocalWikiのページを作成することができます。
更新: 2015年1月27日
(
Tetsuro_Toyoda
)
テキスト
詳細
これにより、自治体が公開するオープンデータから、LocalWikiページへのリンクの張り方(URL)がルール化されるため、オープンデータを使って開発したアプリからLocalWikiのコンテンツを利用しやすくなります。
更新: 2015年1月27日
(
Tetsuro_Toyoda
)
アプリ
詳細
例えば、下記は室蘭市の夜景スポットをプラグインでLocalWikiに対応付けた例です。
LocalWikiプラグイン|室蘭夜景
Tetsuro_Toyoda
344
回実行
,
0
回Fork
,
更新:
2015年1月27日
2
評価指数
1
0
更新: 2015年1月27日
(
Tetsuro_Toyoda
)
コード
詳細
このプラグインのJavaScriptコードです。このコードはLinkDataに登録されているデータであれば、どのようなデータに対しても適用することができ、同様のアプリを開発できます。創り方は簡単です: LinkDataに登録されているデータに対して、「アプリ」タブを開き、「アプリを作成」ボタンをおして、「次へ」を3回押して起動するプログラムエディタのJavaScript中身を下記プログラムに置き換え、さらにCSSタブを開いて下記のCSSを置き換えれば完成です。プログラムの3~6行目にある region, titlepre, titlepost, property を適宜修正して、LocalWikiへの適切なURLを定義してみてください。 (※注意、既にこのアプリが適用されているデータに対しては、重複してこのプログラムを適用しないでください。) JavaScriptプログラム
クリックして選択
// Created by Tetsuro Toyoda ver 2015.1.27.0 var localwiki = "http://ja.localwiki.org";//localwikiのドメイン var region = "mr";//localwikiのregion var titlepre = "";//タイトルの名の前に付ける文字列 var titlepost = "";//タイトル名の後に付ける文字列 var property = "label"; //タイトル名のもととなるプロパティ名(複数ある場合は後者を採用) var comment ="LocalWikiは地域のスポットについて誰でも自由に追記できるページです。自分の知識を各ページに記載して、地域の情報を共有しましょう! アプリ開発できる方はデータをダウンロードして、観光アプリをつくってみてはいかがでしょうか。
地域のLocalWikiトップページを開く
"; function download(workValue, fileKey, fileValue) { var win = window.open(); win.document.writeln("
"); $.each(LinkData.getSubjects(workValue, fileValue), function(subjKey, subjValue) { var titlename = ""; // var data = ""; $.each( LinkData.getTriplesBySubject(workValue, fileValue, subjValue), function( tripleKey, tripleValue ) { var prop = tripleValue.property; var obj = tripleValue.object; if ( getLastName(prop) == property ) titlename = obj; }); var url = localwiki + "/" + region + "/" + titlepre + titlename + titlepost; win.document.writeln("
"+url+"
"+subjValue+"
"); }); win.document.writeln("
"); } window.onload = function() { var keyword = getParameterFromURL("subject"); // obtain keyword from the URL "?subject=" var list = ""; // list to be displayed var ruteToHitPoint = ""; var prefs = new Array(); var downloadbutton = ""; // Work loop $.each(LinkData.getWorks(), function(workKey, workValue) { list += "
LocalWikiへのリンク | " + LinkData.getWorkName(workValue) + "
" + comment; // File loop $.each(LinkData.getFiles(workValue), function(fileKey, fileValue) { var hit = ""; // list of subjects whose URI matches keyword var nHit = 0; // number of subjects whose URI matches keyword // Subject loop $.each(LinkData.getSubjects(workValue, fileValue), function(subjKey, subjValue) { var longitude = null; var latitude = null; var titlename = ""; var s = ""; // subject to be displayed if ( decodeURIComponent(subjValue).indexOf("linkdata.org/resource/") > 0 ) s += "
【他のアプリを表示】
"; else s += "
"+decodeURIComponent(subjValue)+"
"; $.each( LinkData.getTriplesBySubject(workValue, fileValue, subjValue), function( tripleKey, tripleValue ) { var prop = tripleValue.property; var obj = tripleValue.object; if ( getLastName(prop) == property ) titlename = obj; if ( prop == "http://www.w3.org/2003/01/geo/wgs84_pos#long" ) longitude = obj;// longitude found if ( prop == "http://www.w3.org/2003/01/geo/wgs84_pos#lat" ) latitude = obj;// latitude found if ( obj.indexOf("://www.youtube.com") != -1 && obj.indexOf("v=") != -1 ) { // Insert YouTube Thumbnail videoId = (obj.split("v=")[1]).split("&")[0]; // get video id obj = "
" + highlight(decodeURIComponent(obj), keyword) + "
"; } else if ( obj.indexOf("http") == 0 ) { if ((obj.indexOf(".jpg" )>0 || obj.indexOf(".gif" )>0 || obj.indexOf(".png" )>0) || (obj.indexOf(".JPG" )>0 || obj.indexOf(".GIF" )>0 || obj.indexOf(".PNG" )>0)) // insert image obj = "
" +shortenURL(obj) + "
"; else obj = "
" + shortenURL(obj) + "
"; // Make it clicable if it starts from http } else obj = "
" + highlight(obj, keyword) + "
"; s += "
" + getLastName(prop) + ":\t
" + obj; }); if ( latitude != null && longitude != null ) s += addLinkToMap( latitude, longitude ); var url = localwiki + "/" + region + "/" + titlepre + titlename + titlepost; s = "
" + titlepre + titlename + titlepost + "
【LocalWikiを編集】
" + s; prefs.push([s,latitude,longitude]); if ( decodeURIComponent(subjValue) == keyword ) { // found subject whose URI matches keyword hit += s; ruteToHitPoint = "http://www.google.com/maps/?daddr=" + latitude + "," + longitude; nHit++; } //link to map display if coordinates exist }); if ( nHit > 0 ) { list += hit; } downloadbutton = "
"; }); }); $("#result").append( list + "この端末からの位置情報の取得を許可してからもう一度アクセスしてください。" ); navigator.geolocation.getCurrentPosition(function(pos) { var lat = pos.coords.latitude; var long = pos.coords.longitude; $('#result').empty(); $('#result').append( list ); if ( ruteToHitPoint != "" ) { $('#result').append("
【ここから目的地へのルートを表示】
"); } $('#result').append( "
" + downloadbutton + "
以下、現在地から近い順にページをリスト表示します。
"); $.each(prefs, function(i, p) { p[3] = Distance(long, lat, p[2], p[1]); }); prefs.sort(function(p1, p2) { return p1[3] - p2[3]; }); $.each(prefs, function(i, p) { $('#result').append(p[0]); $('#result').append("
【ここから目的地へのルートを表示】
"); $('#result').append("
ここから目的地までの直線距離は"+Math.floor(p[3])/1000+"kmです
"); }); }, function(error) { $('#result').empty(); $('#result').append( list + "
" + downloadbutton + "
以下、登録順にページをリスト表示します。
"); $.each(prefs, function(i, p) { $('#result').append(p[0]); }); }); }; // Get a parameter value in URL (e.g. ?paramString=value ) function getParameterFromURL( paramString ) { var value = ""; var topWindow = top.window.location.search; if( topWindow ){ var q = decodeURIComponent(topWindow.substring(1,topWindow.length)).split("&"); for ( var i = 0; i < q.length; i++ ){ var r = q[i].split("="); if ( r[0] == paramString ) value = r[1]; } } return value; } // Highlight keyword in the string function highlight( string, keyword ) { if ( keyword.length > 0 ) { var ss = string.split(keyword); var len = ss.length; if ( len > 1 ) { string = ss[0]; for ( i = 1; i < len; i++ ) // string += "
"+keyword+"
"+ss[i]; string += "
"+keyword+"
"+ss[i]; } } return string; } // get the last name of the string separated with # and / function getLastName( string ) { string = decodeURIComponent(string); var sharp = string.split("#"); var slash = sharp[sharp.length-1].split("/"); var lastName = slash[slash.length-1]; return lastName; } // return a link to Google map search function addLinkToMap( latitude, longitude ) { var s = "
【地図表示】
"; return s; } // shortening URL e.g. http://.../123.jpg function shortenURL( url ) { url = decodeURIComponent(url); var slash = url.split("/"); var lastName = slash[slash.length-1]; return url.split(":")[0]+"://.../"+lastName; } function Distance( long1, lat1, long2, lat2 ) { var r = 6378137; //地球の半径(m) var d = r * Math.acos( Math.sin(lat1/180*Math.PI)*Math.sin(lat2/180*Math.PI) + Math.cos(lat1/180*Math.PI)*Math.cos(lat2/180*Math.PI)*Math.cos((long2-long1)/180*Math.PI) ); return d; }
更新: 2015年1月27日
(
Tetsuro_Toyoda
)
コード
詳細
CSS のプログラム
クリックして選択
span.highlight {color: red;} span.propertyName {color: gray;} span.subject { color: blue; } span.object{ color: black; } span.link{ color: black; } body { background: white; } a, a span { text-decoration: underline; } a:hover, a span:hover { text-decoration: none; }
更新: 2015年1月27日
(
Tetsuro_Toyoda
)
テキスト
詳細
現在のところ、LinkDataからLocalWikiのページに緯度経度情報を渡す方法を調査中です。お手数ですが、しばらくは、LocalWikiのページにおいて、緯度経度情報を再入力する必要があります。
更新: 2015年1月27日
(
Tetsuro_Toyoda
)
おすすめの助成制度
このページにおける記載内容を実施する際におすすめの助成制度の情報です。
** まだ助成制度の情報がマッチングされていません。
他の助成制度を見る
このページを引用して新規作成
コメント
送信者の情報
名前
*
E-mail
*
件名
*
メッセージ
*
アクセス認証
*
送信
キャンセル