第5回 python

今回はpythonで様々なプログラムを作成しました。

今回作ったのは旅行を計画する際の「あったらいいな」です。
Pinterestで様々な画像を見ているときに「ここいいな。行きたい!」と思ったことはありませんか?
でもPinterestには検索機能がないので、それがどこなのか分からないですよね。
そこでGoogleの画像検索機能を使い、場所を特定します。
次に分かったその場所の周辺の観光スポットを検索します。ここではInstagramを使います。
最後に宿の検索を行います。ここではbooking.comを使います。
場所・チェックイン日・チェックアウト日・人数・部屋数を入力することにより、あなたにぴったりの宿を教えてくれます。
これで旅の準備は完璧!このプログラムさえあれば、行きたいと思った場所にすぐにでも出発できます!

Google画像検索のコード

※画像を挿入し、検索することはできるのですが、ダイレクト検索が出来ず、検索画面になってしまいます。

                  

import kivy from kivy.app import App from kivy.uix.boxlayout import BoxLayout from kivy.uix.button import Button from kivy.uix.label import Label from kivy.core.window import Window import webbrowser import os kivy.require('2.2.1') # Kivyのバージョンを修正 class ImageSearchApp(App): def __init__(self, **kwargs): super().__init__(**kwargs) self.image_path = None def build(self): self.layout = BoxLayout(orientation='vertical') self.image_drop_box = DropImageBox() self.search_button = Button(text='Search Image') self.search_button.bind(on_press=self.search_image) self.layout.add_widget(self.image_drop_box) self.layout.add_widget(self.search_button) return self.layout def search_image(self, instance): if self.image_drop_box.image_path: image_path = self.image_drop_box.image_path # 画像のURLをそのまま使用して検索 search_url = f'https://www.google.com/searchbyimage?image_url=file://{image_path}' webbrowser.open(search_url) class DropImageBox(BoxLayout): def __init__(self, **kwargs): super().__init__(**kwargs) self.orientation = 'vertical' self.spacing = 10 self.label = Label(text='Drag and drop an image here') self.image_path = None self.add_widget(self.label) Window.bind(on_drop_file=self._on_drop_file) def _on_drop_file(self, window, file_path, *args): try: self.image_path = file_path.decode('utf-8') self.label.text = f'Image Path: {self.image_path}' except Exception as e: print(f"Exception in _on_drop_file: {e}") if __name__ == '__main__': app = ImageSearchApp() app.run()

実際にやってみたときの動画

>

Instagramでの周辺スポット検索のコード

                   

import japanize_kivy import urllib.parse import kivy from kivy.app import App from kivy.uix.boxlayout import BoxLayout from kivy.uix.textinput import TextInput from kivy.uix.button import Button import webbrowser kivy.require('1.11.1') class HashTagSearchApp(App): def __init__(self, **kwargs): super().__init__(**kwargs) self.hashtags = [] def build(self): self.layout = BoxLayout(orientation='vertical') self.input_text = TextInput(hint_text='enter a hashtag without "#"') self.add_button = Button(text='search') self.add_button.bind(on_press=self.search_hashtag) self.layout.add_widget(self.input_text) self.layout.add_widget(self.add_button) return self.layout def search_hashtag(self, instance): hashtag = self.input_text.text.strip() if hashtag: self.hashtags.append(hashtag) hashtag = urllib.parse.quote(hashtag) # キーワードをエンコード search_url = f'https://www.instagram.com/explore/tags/{hashtag}/' webbrowser.open(search_url) # ウィンドウを閉じないようにするためのカスタムロジックを追加 pass if __name__ == '__main__': app = HashTagSearchApp() app.run()

booking.comでの宿検索のコード

                   

import japanize_kivy import urllib.parse import kivy from kivy.app import App from kivy.uix.boxlayout import BoxLayout from kivy.uix.textinput import TextInput from kivy.uix.button import Button import webbrowser kivy.require('1.11.1') class HotelSearchApp(App): def __init__(self, **kwargs): super().__init__(**kwargs) def build(self): self.layout = BoxLayout(orientation='vertical') self.location_input = TextInput(hint_text='目的地を入力してください') self.check_in_input = TextInput(hint_text='チェックイン日(例: 2023-11-04)') self.check_out_input = TextInput(hint_text='チェックアウト日(例: 2023-11-07)') self.guests_input = TextInput(hint_text='宿泊人数') self.rooms_input = TextInput(hint_text='部屋数') self.search_button = Button(text='検索') self.search_button.bind(on_press=self.search_hotels) self.layout.add_widget(self.location_input) self.layout.add_widget(self.check_in_input) self.layout.add_widget(self.check_out_input) self.layout.add_widget(self.guests_input) self.layout.add_widget(self.rooms_input) self.layout.add_widget(self.search_button) return self.layout def search_hotels(self, instance): location = self.location_input.text.strip() check_in_date = self.check_in_input.text.strip() check_out_date = self.check_out_input.text.strip() guests = self.guests_input.text.strip() rooms = self.rooms_input.text.strip() if location and check_in_date and check_out_date: # 実際の宿泊サイトのURLに合わせて調整 # 以下はBooking.comの例 base_url = 'https://www.booking.com/search.html' query_parameters = { 'ss': location, 'checkin_monthday': check_in_date.split('-')[2], 'checkin_year_month': f'{check_in_date.split("-")[0]}-{check_in_date.split("-")[1]}', 'checkout_monthday': check_out_date.split('-')[2], 'checkout_year_month': f'{check_out_date.split("-")[0]}-{check_out_date.split("-")[1]}', 'group_adults': guests, 'no_rooms': rooms, } query_string = urllib.parse.urlencode(query_parameters) search_url = f'{base_url}?{query_string}' webbrowser.open(search_url) if __name__ == '__main__': app = HotelSearchApp() app.run()