マヨケーがポアされたため、現在はロシケーがメインとなっています。

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

ナビゲーションに移動 検索に移動
→‎コード: v2.2.0 埋め込まれた動画を取得できるように変更 エラー処理などは追い追い wiki文法と衝突する文字のエスケープロジック変更
>Fet-Fe
(→‎コード: v2.1.8 archive.phにリクエストするとき、魚拓対象のurlに含まれる"="にはURIエンコードすべきものとしないものとがあるので、判定ロジックを追加)
>Fet-Fe
(→‎コード: v2.2.0 埋め込まれた動画を取得できるように変更 エラー処理などは追い追い wiki文法と衝突する文字のエスケープロジック変更)
6行目: 6行目:


'''
'''
ver2.1.8 2022/11/17恒心
ver2.2.0 2022/12/10恒心


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


   ##twitterのURL
   ##twitterのURL
423行目: 423行目:
           media_list.append(f"[[ファイル:(画像の取得ができませんでした)|240px]]")
           media_list.append(f"[[ファイル:(画像の取得ができませんでした)|240px]]")
       # 動画についてはm3u8で落ちてきて面倒臭いため取得しない
       # 動画についてはm3u8で落ちてきて面倒臭いため取得しない
      """
       for i, video in enumerate(tweet_media.select('.attachment.video-container video')):
       for video in tweet_media.select('.attachment.video-container video'):
         media_url: str = unquote(re.search(r'[^\/]+$', video.get('data-url')).group(0))
         media_url: str = unquote(re.search(r'[^\/]+$', video.get('data-url')).group(0))
         print(media_url)
         tweet_id: str = urljoin(self.TWITTER_URL, re.sub('#[^#]*$', '', tweet.find(class_='tweet-link').get('href'))).split('/')[-1]
      """
        media_list.append(f"[[ファイル:{tweet_id}_{i}.mp4]]")
        os.system(f"yes N 2>/dev/null | ffmpeg -http_proxy {self.PROXIES['http']} -i \"{urljoin(self.NITTER_INSTANCE, media_url)}\" -c copy {os.path.join(self.MEDIA_DIR, tweet_id)}_{i}.ts &> /dev/null")
        os.system(f"yes N 2>/dev/null | ffmpeg -i {os.path.join(self.MEDIA_DIR, tweet_id)}_{i}.ts -acodec copy -vcodec copy {os.path.join(self.MEDIA_DIR, tweet_id)}_{i}.mp4 &> /dev/null")
        print(f"{os.path.join(self.MEDIA_DIR, tweet_id)}_{i}.mp4をアップロードしなければない。")
       media_txt = '<br>\n' + ' '.join(media_list)
       media_txt = '<br>\n' + ' '.join(media_list)
     return media_txt
     return media_txt
488行目: 490行目:
         print(f"{self.LIMIT_N_TWEETS}件も記録している。もうやめにしませんか。")
         print(f"{self.LIMIT_N_TWEETS}件も記録している。もうやめにしませんか。")
         self._make_txt()
         self._make_txt()
  #テンプレート外の#をnowikiで囲む
  def _escape_hash(self, text: str) -> str:
    archive_begin: Final[str] = '{{Archive|'
    callinshowlink_begin: Final[str] = '{{CallinShowLink|'
    archive_end: Final[str] = '}}'
    current_depth: int = 0
    new_text: str = ''
    for i in range(len(text)):
      if text[i:i+len(archive_begin)] == archive_begin or text[i:i+len(callinshowlink_begin)] == callinshowlink_begin:
        current_depth += 1
      elif text[i:i+len(archive_end)] == archive_end:
        current_depth = max(current_depth-1, 0)
      if current_depth == 0 and text[i] == '#':
        new_text += '<nowiki>#</nowiki>'
      else:
        new_text += text[i]
    return new_text


   #MediaWiki文法と衝突する文字を無効化する
   #MediaWiki文法と衝突する文字を無効化する
511行目: 495行目:
     text = text.replace('\n', '<br>\n')
     text = text.replace('\n', '<br>\n')
     text = re.sub(r'^ ', '&nbsp;', text, flags=re.MULTILINE)
     text = re.sub(r'^ ', '&nbsp;', text, flags=re.MULTILINE)
     text = self._escape_hash(text)
     text = re.sub(r'^([\*#:;])', r'<nowiki>\1</nowiki>', text, flags=re.MULTILINE)
    text = re.sub(r'^----', '<nowiki>----</nowiki>', text, flags=re.MULTILINE)
     return text
     return text


543行目: 528行目:
   def _archive(self, url: Final[str]) -> str:
   def _archive(self, url: Final[str]) -> str:
     def encode_query_value_equals(url: str) -> str:
     def encode_query_value_equals(url: str) -> str:
       query_found = False
       query_found: bool = False
       in_query_value = False
       in_query_value: bool = False
       i = 0
       i: int = 0
       for c in url:
       for c in url:
         if c == '?':
         if c == '?':
559行目: 544行目:
       return url
       return url


     archive_url: str = urljoin(self.ARCHIVE_TODAY_STANDARD, encode_query_value_equals(quote(unquote(url), safe='&=+?%'))) ##wikiに載せるとき用URLで失敗するとこのままhttps://archive.ph/https%3A%2F%2Fxxxxxxxxの形で返される
     archive_url: str = urljoin(self.ARCHIVE_TODAY_STANDARD, quote(unquote(url), safe='&=+?%')) ##wikiに載せるとき用URLで失敗するとこのままhttps://archive.ph/https%3A%2F%2Fxxxxxxxxの形で返される
     res: Final[Response | None] = self._request(urljoin(self.ARCHIVE_TODAY, encode_query_value_equals(quote(unquote(url), safe='&=+?%')))) ##アクセス用URL使って結果を取得
     res: Final[Response | None] = self._request(urljoin(self.ARCHIVE_TODAY, quote(unquote(url), safe='&=+?%'))) ##アクセス用URL使って結果を取得
     if res is None : ##魚拓接続失敗時処理
     if res is None : ##魚拓接続失敗時処理
       print(archive_url + 'にアクセス失敗ナリ。出力されるテキストにはそのまま記載されるナリ。')
       print(archive_url + 'にアクセス失敗ナリ。出力されるテキストにはそのまま記載されるナリ。')
匿名利用者

案内メニュー