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

→‎コード: v3.0.1 tweets or repliesでは引用元が削除された引用リツイートも拾えるので、引用元が消えていたらその旨を表示する。@メンションに対してリンクをつけるように修正。編集や長いツイートを判定する材料が消えたので機能削除
>Fet-Fe
(→‎コード: Twitterの相次ぐ仕様変更のせいでnitterのsearchが使えなくなっていたので、tweets or repliesから取得するようにとりとり変更。またURLの仕様も変わり、もはや前のスクリプトでは取得ができなくなったので、メジャーバージョンアップ。)
>Fet-Fe
(→‎コード: v3.0.1 tweets or repliesでは引用元が削除された引用リツイートも拾えるので、引用元が消えていたらその旨を表示する。@メンションに対してリンクをつけるように修正。編集や長いツイートを判定する材料が消えたので機能削除)
6行目: 6行目:


'''
'''
ver3.0.0 2023/4/29恒心
ver3.0.1 2023/4/30恒心


当コードは恒心停止してしまったhttps://rentry.co/7298gの降臨ショーツイート自動収集スクリプトの復刻改善版です
当コードは恒心停止してしまったhttps://rentry.co/7298gの降臨ショーツイート自動収集スクリプトの復刻改善版です
448行目: 448行目:
       link = urljoin(self.TWITTER_URL, link)
       link = urljoin(self.TWITTER_URL, link)
       quote_txt = self._archive_url(link)
       quote_txt = self._archive_url(link)
    tweet_quote_unavailable: Final[bs4.element.Tag | None] = tweet.select_one('.tweet-body > .quote.unavailable') # 引用リツイートを選択
    if tweet_quote_unavailable is not None:
      quote_txt = '(引用元が削除されました)'
     return quote_txt
     return quote_txt


463行目: 466行目:
       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
  def _check_additional_info(self, tweet: bs4.element.Tag, tweet_url: str) -> None:
    if '/i/web/status/' in tweet.text:
      print(f"{tweet_url}をには編集前のツイートか省略が存在する可能性があります")


   #一ツイートのブロックごとにリストで取得。そのままtimeline-itemクラスをfind_allするとツイートの順番が逆転するので、順番通りに取得するよう処理
   #一ツイートのブロックごとにリストで取得。そのままtimeline-itemクラスをfind_allするとツイートの順番が逆転するので、順番通りに取得するよう処理
489行目: 488行目:
       if tweet.find(class_='retweet-header') is not None: ##retweet-headerはリツイートを示すので入っていれば処理しない
       if tweet.find(class_='retweet-header') is not None: ##retweet-headerはリツイートを示すので入っていれば処理しない
         continue
         continue
       if tweet.find(class_='pinned') is not None: ##pinnedは固定ツイートを示すので入っていれば処理しない、未テスト
       if tweet.find(class_='pinned') is not None: ##pinnedは固定ツイートを示すので入っていれば処理しない
         continue
         continue
       if len(self.query_strs) > 0: # クエリが指定されている場合、一つでも含まないツイートは処理しない
       if len(self.query_strs) > 0: # クエリが指定されている場合、一つでも含まないツイートは処理しない、未テスト
         not_match: bool = False
         not_match: bool = False
         for query_str in query_strs:
         for query_str in query_strs:
510行目: 509行目:
       quote_txt: str = self._get_tweet_quote(tweet) ##引用リツイートの場合、元ツイートを追加
       quote_txt: str = self._get_tweet_quote(tweet) ##引用リツイートの場合、元ツイートを追加
       poll_txt: str = self._get_tweet_poll(tweet) ##投票の取得
       poll_txt: str = self._get_tweet_poll(tweet) ##投票の取得
      self._check_additional_info(tweet_content, tweet_url) ##編集や長いツイートの省略をチェック
       self._txt_data[0] = '!' + archived_tweet_url + '\n|-\n|\n' \
       self._txt_data[0] = '!' + archived_tweet_url + '\n|-\n|\n' \
         + '<br>\n'.join(filter(None, [
         + '<br>\n'.join(filter(None, [
590行目: 588行目:
         else:
         else:
           url.replace_with(self._archive_url(url.get('href'))) ##テンプレートArchiveに変化
           url.replace_with(self._archive_url(url.get('href'))) ##テンプレートArchiveに変化
      elif url.text.startswith('@'):
          url_link: str = urljoin(self.TWITTER_URL, url.get('href'))
          url_text: str = url.text
          url.replace_with(self._archive_url(url_link, url_text)) ##テンプレートArchiveに変化


   #URLをテンプレートArchiveに変化させる。#がURLに含まれていたら別途処理
   #URLをテンプレートArchiveに変化させる。#がURLに含まれていたら別途処理
   def _archive_url(self, url: Final[str]) -> str:
   def _archive_url(self, url: Final[str], text: Final[str|None] = None) -> str:
     if '#' in url:
     if '#' in url:
       main_url, fragment = url.split('#', maxsplit=1)
       main_url, fragment = url.split('#', maxsplit=1)
       return '{{Archive|1=' + unquote(url) + '|2=' + self._archive(main_url) + '#' + fragment + '}}' ##テンプレートArchiveの文字列返す
       if text is None:
        return '{{Archive|1=' + unquote(url) + '|2=' + self._archive(main_url) + '#' + fragment + '}}' ##テンプレートArchiveの文字列返す
      else:
        return '{{Archive|1=' + unquote(url) + '|2=' + self._archive(main_url) + '#' + fragment + + '|3=' + text + '}}' ##テンプレートArchiveの文字列返す
     else:
     else:
       return '{{Archive|1=' + unquote(url) + '|2=' + self._archive(url) + '}}' ##テンプレートArchiveの文字列返す
       if text is None:
        return '{{Archive|1=' + unquote(url) + '|2=' + self._archive(url) + '}}' ##テンプレートArchiveの文字列返す
      else:
        return '{{Archive|1=' + unquote(url) + '|2=' + self._archive(url) + '|3=' + text + '}}' ##テンプレートArchiveの文字列返す


   #URLをテンプレートCallinShowlinkに変化させる
   #URLをテンプレートCallinShowlinkに変化させる
匿名利用者