「利用者:夜泣き/スクリプト」の版間の差分

→‎コード: v2.2.5 ツリーの取得が逆順になっていたのを修正。Nitter上でtwitterのリンクがtwitter.comに直らないことがあるのを修正
>Fet-Fe
(v2.2.4 Nitter上のinstagramのリンクを処理)
>Fet-Fe
(→‎コード: v2.2.5 ツリーの取得が逆順になっていたのを修正。Nitter上でtwitterのリンクがtwitter.comに直らないことがあるのを修正)
6行目: 6行目:


'''
'''
ver2.2.4 2023/1/19恒心
ver2.2.5 2023/1/23恒心


当コードは恒心停止してしまったhttps://rentry.co/7298gの降臨ショーツイート自動収集スクリプトの復刻改善版です
当コードは恒心停止してしまったhttps://rentry.co/7298gの降臨ショーツイート自動収集スクリプトの復刻改善版です
77行目: 77行目:
   ##記事の文章に使うのはクリアネット
   ##記事の文章に使うのはクリアネット
   ##末尾にスラッシュ必須
   ##末尾にスラッシュ必須
   ARCHIVE_TODAY_STANDARD: Final[str] = 'https://archive.md/'
   ARCHIVE_TODAY_STANDARD: Final[str] = 'https://archive.vn/'


   ##twitterのURL
   ##twitterのURL
478行目: 478行目:
       poll_txt += '<br>\n&nbsp; <span style="font-size: small;">' + tweet_poll.select_one('.poll-info').text + '</span>'
       poll_txt += '<br>\n&nbsp; <span style="font-size: small;">' + tweet_poll.select_one('.poll-info').text + '</span>'
     return poll_txt
     return poll_txt
  #一ツイートのブロックごとにリストで取得。そのままtimeline-itemクラスをfind_allするとツイートの順番が逆転するので、順番通りに取得するよう処理
  def _get_timeline_items(self, soup: BeautifulSoup) -> list[bs4.element.Tag]:
    timeline_item_list: list[bs4.element.Tag] = []
    for item_or_list in soup.select('.timeline > .timeline-item, .timeline > .thread-line'):
      if 'thread-line' in item_or_list.attrs['class']:
        for item in reversed(item_or_list.select('.timeline-item')):
          timeline_item_list.append(item)
      else:
        timeline_item_list.append(item_or_list)
    return timeline_item_list


   #ページからツイート本文をself._txt_dataに収めていく
   #ページからツイート本文をself._txt_dataに収めていく
   def get_tweet(self) -> None | NoReturn:
   def get_tweet(self) -> None | NoReturn:
     soup: Final[BeautifulSoup] = BeautifulSoup(self._page.text, 'html.parser') ##beautifulsoupでレスポンス解析
     soup: Final[BeautifulSoup] = BeautifulSoup(self._page.text, 'html.parser') ##beautifulsoupでレスポンス解析
     tweets: Final[bs4.element.ResultSet] = soup.find_all(class_='timeline-item') ##一ツイートのブロックごとにリストで取得
     tweets: Final[list[bs4.element.Tag]] = self._get_timeline_items(soup) ##一ツイートのブロックごとにリストで取得
     for tweet in tweets: ##一ツイート毎に処理
     for tweet in tweets: ##一ツイート毎に処理
       if tweet.a.text == self.NEWEST: ##Load Newestのボタンは処理しない
       if tweet.a.text == self.NEWEST: ##Load Newestのボタンは処理しない
528行目: 540行目:
           #Nitter上のTwitterへのリンクを直す
           #Nitter上のTwitterへのリンクを直す
           url_link: str = url.get('href').replace('https' + self.NITTER_INSTANCE[4:], self.TWITTER_URL)
           url_link: str = url.get('href').replace('https' + self.NITTER_INSTANCE[4:], self.TWITTER_URL)
          url_link = re.sub('\?.*$', '', url_link)
          url.replace_with(self._archive_url(url_link, url_link)) ##テンプレートArchiveに変化
        elif url.get('href').startswith('https://nitter.kavin.rocks/'):
          #Nitter上のTwitterへのリンクを直す
          url_link: str = url.get('href').replace('https://nitter.kavin.rocks/', self.TWITTER_URL)
           url_link = re.sub('\?.*$', '', url_link)
           url_link = re.sub('\?.*$', '', url_link)
           url.replace_with(self._archive_url(url_link, url_link)) ##テンプレートArchiveに変化
           url.replace_with(self._archive_url(url_link, url_link)) ##テンプレートArchiveに変化
匿名利用者