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

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

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

DjangoはPythonで書かれた、オープンソースウェブアプリケーションのフレームワークです。複雑なデータベースを扱うウェブサイトを開発する際に必要な労力を減らす為にデザインされました。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

Q&A

0回答

1254閲覧

ぐるなびPhotoSearchAPI、Djangoでの実装目指して

hmgien1469

総合スコア11

Django

DjangoはPythonで書かれた、オープンソースウェブアプリケーションのフレームワークです。複雑なデータベースを扱うウェブサイトを開発する際に必要な労力を減らす為にデザインされました。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

0グッド

0クリップ

投稿2018/10/01 05:06

編集2018/10/03 02:07

フォームでの検索条件入力で
ぐるなびPhotoSearchAPIからのデータが受け取れないか試しています。
口コミデータから名詞のみ抽出して表示させるないようで作っています。
views.py の内容が悪いのか、エラーメッセージはないものの内容が表示されません。
以下の東京・卵のようにapiからの情報を表示するためにはどうすればいいのでしょう?
イメージ説明

API利用コードは以下の方のものを参考とさせていただきました。
非常に助かりました。
https://teratail.com/questions/145330

<forms.py> from django import forms class Form(forms.Form): 地域 = forms.CharField() 食材 = forms.CharField()
<urls.py> from django.urls import path from . import views app_name = 'analysis' urlpatterns = [ path('', views.IndexView.as_view(), name = 'index'), ]
<views.py> import sys import urllib import urllib.parse import urllib.request import json import re #正規表現で特定のワードを検索 from django.shortcuts import render, redirect from django.views import generic from janome.tokenizer import Tokenizer from operator import add from analysis.forms import Form def gnavi_api(request): form = Form(request.POST) if form.is_valid(): area = form.cleaned_data['地域'] menu_name = form.cleaned_data['食材'] keyid = "" url = "https://api.gnavi.co.jp/PhotoSearchAPI/v3/" #input("メニュー名を入力してください:") encoding = 'utf-8' query = [ ("format", "json"), ("keyid", keyid), ("area", area.encode(encoding)), ("menu_name", menu_name.encode(encoding)), ("hit_per_page", 50), # default:15, max:50 ("offset", 1), # 検索開始位置(デフォルト:1) ] # Generate URL. url += "?{0}".format(urllib.parse.urlencode(query)) # Execute API try: result = urllib.request.urlopen(url).read() return result except: raise Exception("APIアクセスに失敗しました。") def parse_json(json_f): # parse json parsed_json = json.loads(json_f) # Check error. if 'error' in parsed_json: if 'message' in parsed_json: raise Exception('{0}'.format(parsed_json['message'])) else: raise Exception('データ取得に失敗しました') # Save json. with open('output.json', 'w') as f: json.dump(parsed_json, f) # 該当件数 total_hit_count = parsed_json['response'].get('total_hit_count', 0) # 1回のリクエストで得る最大投稿件数(デフォルト:15、上限:50) hit_per_page = parsed_json['response'].get('hit_per_page', 0) # ヒット件数が0以下なら終了 if total_hit_count <= 0 or hit_per_page <= 0: raise Exception("指定した内容ではヒットしませんでした。") #input_num = int(input("追加で取得するコメントの文章数を入力してください: ")) line = [] # 応援口コミデータ取得 for (_, seq) in enumerate(parsed_json['response']): try: photo = parsed_json["response"]["{0}".format(seq)]["photo"] except: continue # コメント取得 if(photo.get('comment', None)): userComment = photo.get('comment') removeCharacters = str.maketrans({ '\r': '', '\n': '', '\t': '', '\u3000':'', }) userComment = userComment.translate(removeCharacters) line.append(userComment) return line def main(request): result = gnavi_api(request) return parse_json(result) def token(request): t = Tokenizer() texts = main(request) list_all = [] for tokens in texts: i = [token.surface for token in t.tokenize(tokens) if token.part_of_speech.startswith('名詞')] list_all.append(i) ex_list_all = [] for s in list_all: ex_list_all.extend(s) return ex_list_all class IndexView(generic.TemplateView): template_name = 'analysis/forms.html' def get(self, request): form = Form() return render(request, self.template_name, {'form':form}) def post(self, request): form = Form(request.POST) if form.is_valid(): area = form.cleaned_data['地域'] menu_name = form.cleaned_data['食材'] args = {'form':form, 'area':area, 'menu_name':menu_name} return render(request, self.template_name, args) def re(self, request): form = Form(request.POST) name = token(request) context = { 'form':form, 'name':name, } return render(self.request, self.template_name, context)
<forms.html> {% extends 'analysis/base.html' %} {% block content %} <h2>ぐるなび応援口コミ</h2> <div class="container"> <form action="" method="post"> {{ message }} {% csrf_token %} {{ form.as_p }} <button type="submit" class="btn btn-success">検索</button> </form> <h2>{{ area }}</h2> <h2>{{ menu_name }}</h2> <h2>{{ name }}</h2> </div> {% endblock %}

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

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

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

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

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

guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

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

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

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

ただいまの回答率
85.49%

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

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

質問する

関連した質問