tkinter がうまくいかないので、PyQt6でウィジェットに挑戦（その５）「Googleの急上昇ワード」の表示に"QTextBrowser"でURLにリンク設定を追加

# 環境
>・MacOS Ventura 13.2
・python3.10.4
・pyqt6(インストールが必要です。% python3 -m pip install pyqt6)
・requests(インストールが必要です。% python3 -m pip install requests)
*WEBプラウザの代わりにwebサイトにアクセスしてHTTP
データの送受信を行うライブラリです。*

# 作った理由
>「Googleの急上昇ワード」を表示するWidgetを作成し、ついでにそのサイトを開けるように、QTextBrowser()オブジェクトを使ってリンクを設定して見ました。
QTextBrowser()オブジェクトを使ってリンクを設定するcodeは以下の通りです。　"**Label**"でもできるのですが、**urlの折り返しができない**ため、横に長いwidgetになってしまいます。
ChatGPT曰く、QTextBrowser()オブジェクトを使えば希望通りになるとのことで使って見ました。
```python
        # label03(サイトのURLのリンクの表示と分割表示)
        self.text_browser = QTextBrowser()
        self.text_browser.setOpenLinks(False)  # リンクを自動的に開かないようにする
        self.text_browser.setHtml("取得data: <a href='https://trends.google.com/trends/trendingsearches/daily?geo=JP&hl=ja'>https://trends.google.com/trends/trendingsearches/daily?geo=JP&hl=ja</a>")
        self.text_browser.anchorClicked.connect(self.open_link)
        layout.addWidget(self.text_browser)

        self.setLayout(layout)
    # -----------------------------------------------------
    def open_link(self, url: QUrl):
        QDesktopServices.openUrl(url)
```

# 出来上がったWedget
>Enterをクリックする
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/634708/09dd0dc3-45c4-9aaa-dcfa-7a5a02140a7e.png" alt="スクリーンショット"width="400">
>「Google急上昇ワード」が表示される
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/634708/062bb514-b5e8-c857-e196-d1a7903a9eed.png" alt="スクリーンショット"width="400">
>取得dataのリンクをクリックすると、webサイトが開く

# ＜それでは下記のCodeをコピペして試して見てください＞
```python
#googleの急上昇ワードの検索
# ----------------------------------------------------------
import requests
from bs4 import BeautifulSoup
import pprint
# ----------------------------------------------------------
import sys
#from PyQt6 import QtWidgets
from PyQt6.QtWidgets import QApplication, QWidget, QVBoxLayout, QLabel, QPushButton, QTextBrowser
from PyQt6.QtGui import QFont   # fontの作成
from PyQt6.QtCore import QUrl #サイトのリンクを開く
from PyQt6.QtGui import QDesktopServices #サイトのリンクを開く
# ----------------------------------------------------------
class MainWindow(QWidget):
    def __init__(self):
        super().__init__()
        self.initUI()

    # -----------------------------------------------------
    def initUI(self):
        #window titleの設定
        self.setWindowTitle("Google急上昇Word")
        # -------------------------------------------------
        # layoutを設定
        layout = QVBoxLayout()
        self.setLayout(layout)
        # -------------------------------------------------
        # fontの作成
        #font = QFont("Helvetica", 15, QFont.Weight.Normal)
        # -------------------------------------------------
        # Widgetの設定
        # label01(Titleを表示するlabel)
        self.lbl01 = QLabel("Google急上昇Word")
        font1 = QFont("Helvetica", 20, QFont.Weight.Normal)
        self.lbl01.setFont(font1)
        self.lbl01.setStyleSheet("color:brown")
        layout.addWidget(self.lbl01)

        # -------------------------------------------------
        # button01(Google 急上昇Wordを表示するButton)
        self.btn01 = QPushButton('Enter',self,checkable=True)
        self.btn01.clicked.connect(self.mainText)
        layout.addWidget(self.btn01)
        # -------------------------------------------------
        # label02(Google 急上昇Wordを表示するlabel)
        self.lbl02 = QLabel()
        font2 = QFont("Helvetica", 15, QFont.Weight.Normal)
        self.lbl02.setFont(font2)
        self.lbl02.setStyleSheet("color:blue")
        layout.addWidget(self.lbl02)
        # -------------------------------------------------
        # Widgetを終了するButton
        self.btn_finish = QPushButton('Close',self,checkable=True)
        self.btn_finish.clicked.connect(QApplication.quit)
        layout.addWidget(self.btn_finish)
        # -------------------------------------------------
        # label03(サイトのURLのリンクの表示と分割表示)
        self.text_browser = QTextBrowser()
        self.text_browser.setOpenLinks(False)  # リンクを自動的に開かないようにする
        self.text_browser.setHtml("取得data: <a href='https://trends.google.com/trends/trendingsearches/daily?geo=JP&hl=ja'>https://trends.google.com/trends/trendingsearches/daily?geo=JP&hl=ja</a>")
        self.text_browser.anchorClicked.connect(self.open_link)
        layout.addWidget(self.text_browser)

        self.setLayout(layout)
    # -----------------------------------------------------
    def open_link(self, url: QUrl):
        QDesktopServices.openUrl(url)

    # -----------------------------------------------------
    def mainText(self, event):
        # 下記に説明
        url = "https://trends.google.com/trends/trendingsearches/daily/rss?geo=JP"

        response = requests.get(url)
        soup = BeautifulSoup(response.text, "xml")

        # タイトルを取得し、リストに格納
        keywords = []
        for item in soup.find_all("item"):
            title = item.find("title").text
            keywords.append(title)
        self.lbl02.setText("\n".join(keywords))


# ----------------------------------------------------------
if __name__=='__main__':
    app = QApplication(sys.argv)
    window = MainWindow()
    # ここでクラスの頭に飛ぶ
    window.show()
    app.exec()
```

# このprogramで使用しているURLについて
>**chatGPTが教えてくれたurlは以下の通りでした。**
url = "https&#58;//trends.google.co.jp/trends/trendingsearches<font color="red">/daily/rss?geo=JP</font>"
**webサイトをから取得すると次の通りのurlでした。**
url = "https&#58;//trends.google.com/trends/trendingsearches<font color="red">/daily?geo=JP&hl=ja</font>"
chatGPTに、このサイトの取得方法を聞いたところ
「*<font color="brown">申し訳ありませんが、私の知識は2021年9月までの情報しか持っておりませんので、直近の情報を提供することができません。URLの提供元や最新のデータについては、2023年6月時点の情報を確認する必要があります。</font>*」とのこと。

>**仕方ないので、上記の”trendingsearches/”以下をchatGPTの回答の”daily/rss?geo=JP"へ変更して見たところ**
url = "https&#58;//trends.google.com/trends/trendingsearches<font color="red">/daily/rss?geo=JP</font>"
**CahtGPTが教えてくれたものとほぼ同じサイトが開きました。**
(ざっと見た感じ)違う点は
\<atom:link href="https&#58;//trends.google.<font color="red">co.jp</font>/trends/trendingsearches/daily/rss?geo=JP" rel="self" type="application/rss+xml"/>
↓
\<atom:link href="https&#58;//trends.google.<font color="red">com</font>/trends/trendingsearches/daily/rss?geo=JP" rel="self" type="application/rss+xml"/>
くらいでした。

# urlで開いたサイトの上部に
*This XML file does not appear to have any style information associated with it. The document tree is shown below.*
（この XML ファイルには、関連付けられたスタイル情報がないようです。 ドキュメントツリーを以下に示します。）と表示があったので、chatGPTに聞いて見た回答が以下です。
私にはあまり理解できませんが、このサイトからdataを取得する方が分かりやすいので、まあいいかで終わりました。
# 関連付けられたスタイル情報がないXMLファイルになる理由は、
/daily/rss?geo=JPという変更によって表示されるXMLファイルの構造が変わったためです。

元のURL"/daily?geo=JP&hl=ja"は、地理情報（geo=JP）と言語設定（hl=ja）のパラメータを持つ特定のリソースを指し示しています。これにより、日本の地域に関連する情報を日本語で取得することができます。また、リクエストに応じて関連するスタイル情報も提供される可能性があります。

一方、変更後のURL"/daily/rss?geo=JP"は、より特定のリソースを指し示しています。この場合、XML形式のフィード（RSS）を取得するためのリクエストです。RSSフィードは通常、情報の配信や共有に使用される標準的な形式ですが、スタイル情報は含まれていません。RSSフィードは主にテキストデータを含み、通常は表示に関連するスタイル情報は別の方法で提供されます（たとえば、RSSリーダーなどがスタイル情報を提供することがあります）。

したがって、"/daily/rss?geo=JP"というURLでは、スタイル情報が含まれていないXMLファイルが提供されることになります。ただし、具体的なシナリオや使用されているシステムによっては、XMLファイルにスタイル情報が含まれている可能性もあります。この場合、XMLファイル自体がスタイル情報を提供しているか、別の手段でスタイル情報を取得する必要があります。





# 関係リンク
>**"ChatGPT for Mac" をインストールして使ってみた。**
https://qiita.com/ti104110/items/40563e13d9f389bd62bd
***
>**tkinter がうまくいかないので、PyQt6でWidget（ウィジェット）に挑戦（その１)**
https://qiita.com/ti104110/items/0c0800cff58cd10b9676
***
>**tkinter がうまくいかないので、PyQt6でWidget（ウィジェット）に挑戦（その２）RadioButtonで選択してWebを開く**
https://qiita.com/ti104110/items/7785758f98ef978c2d97
***
>**tkinter がうまくいかないので、PyQt6でWidget（ウィジェット）に挑戦（その３）QGridLayout()オブジェクトを使って、labelとQLineEditを横並びに表示**
https://qiita.com/ti104110/items/a35263176ff5ddaafac7
***
>**tkinter がうまくいかないので、PyQt6でWidget（ウィジェット）に挑戦（その４）自作programをRadiButtonでリスト化**
https://qiita.com/ti104110/items/dc07bcb2d0fa7a9ff269