Giter Club home page Giter Club logo

summaly's People

Contributors

acid-chicken avatar anatawa12 avatar greenkeeper[bot] avatar johann150 avatar kakkokari-gtyih avatar mei23 avatar otofune avatar rinsuki avatar samunohito avatar saschanaz avatar syuilo avatar tamaina avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar

summaly's Issues

npm publish?

NPMではいまも2.7.0が配信されていますが、3.0はNPMで配信しますか?

サマリ取得の動作改善+動作設定を可能にする

Summary

サマリの取得機能に対し、下記の強化処置を施したいです。

1. 取得対象のContent-Lengthの上限をパラメータから設定できるようにする

取得対象のContent-Lengthの上限をパラメータとして取れるようにします。
また、Content-Lengthを返してこないサーバのサマリ生成を拒否するオプションも同時に提供します。

現在のの実装には外部から上限を設定できるようなインターフェースは無く、決め打ちの値が使用されています(サイズは10MBまで)。
上限が設けられているとはいえ、リンク先が大きければ大きいほど負担になります。なので、これを制御できるようにしたいです。

2. HEADメソッドによるヘッダの検証を先に行い、合格した場合のみGETでbodyを取るようにする

GETメソッドでbodyを取る前に、HEADメソッドでレスポンスヘッダの検証を行い、条件に合わない場合はサマリの生成を行わないようにします。

現在のの実装は、URLの先をGETで取得してからヘッダ内容の判定などを行っています 1
GETメソッドによりbodyまで取得されているため、音声ファイルや動画ファイルなどのメディアやPDFなどの巨大なファイルのリンクが貼られた時にマシンリソースを圧迫します。

related: misskey-dev/misskey#13569

Footnotes

  1. 実際にブレークポイントを置き、MP3ファイルを取得するテストを書いて試しました。
    該当ソースはこのへん

SummalyBotのUser-Agentをブラウザ互換にする?

一部サイトは見たことないUAからのリクエストを弾いたり、通常の閲覧時とは異なるHTMLを返すようなので、ChromeなどのブラウザのUser-Agentと互換させるといいかも

image

例↓

Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/115.0.0.0 Safari/537.36 SummalyBot/x.y.z

pnpmのロックファイルとnpmのロックファイルがどちらも含まれている

pnpmのロックファイルであるpnpm-lock.yamlと、npmのロックファイルであるpackage-lock.jsonがどちらも含まれています。どちらかに統一していただきたいです。
また、README.mdではnpmを用いているものの、package.jsonにはpnpmの記載があり、一貫性がなくなっているように見えます。

経緯:

  • #6 にてpnpm-lock.yamlが作成される
  • 994f420 でpackage.jsonにpnpmが記載される

センシティブ判定にratingメタデータも併せて使用する

Googleのセーフサーチはセンシティブ判定に、

<meta name="rating" content="adult">
<meta name="rating" content="RTA-5042-1996-1400-1577-RTA">

のようなメタデータを参照するそうで、サイトがセンシティブかどうかを判断する基準の一つとして使えそうです。
https://developers.google.com/search/docs/crawling-indexing/safesearch?hl=ja#add-metadata

また、HTTPヘッダーに、

rating: RTA-5042-1996-1400-1577-RTA

が含まれるかどうかでも判定が可能なようです。

P〇rnHubがメタタグ・HTTPヘッダー両方に対応しており、このメタデータを使用することでセンシティブと判定できるようになります。DLsiteはメタタグのみ対応。Twitterは非対応。

v5.1.0

#22 の機能をMisskeyから使用したいので、その準備をします。

  • 更新プルリク作成
    • README.md更新
    • CHANGELOG.md更新
    • package.json更新
  • タグ打ち/リリース作成
  • npmへのpublish(やり方分からん)

Skebのプレビューが表示されない

HTTP 429 (Too Many Requests) が Retry-After: 0で返ってくるので、cookieを継承したままretryすれば取得できます。
この動作に対する他のソフトウェアの対応状況ですが、Twitterはたいおうしていますが、discordは対応していない模様です。

参考: HTTP 429 https://datatracker.ietf.org/doc/html/rfc6585#section-4
参考: 調査スレッド https://misskey.niri.la/notes/9nobn2n2he なお、この中でogpの画像がskebのロゴになるという話がありましたが、今確認したところ正しく画像が帰ってきました: https://skeb.jp/@Colon_BR/works/42

Downstream issue: niri-la/misskey.niri.la#124

oembedのjsonにhtmlが含まれてないとエラーになる

https://oembed.com/ 曰くhtmlは必須なので、ない方が悪いですがエラーになって取得できませんになってしまいます。

real world example: https://adventar.org/calendars/9018


TypeError: Cannot read properties of undefined (reading 'startsWith')
    at getOEmbedPlayer (file:///Users/anatawa12/IdeaProjects/summaly/built/general.js:43:20)
    at process.processTicksAndRejections (node:internal/process/task_queues:95:5)
    at async Promise.all (index 1)
    at async default (file:///Users/anatawa12/IdeaProjects/summaly/built/general.js:194:28)
    at async summaly (file:///Users/anatawa12/IdeaProjects/summaly/built/index.js:37:21)
    at async Object.<anonymous> (file:///Users/anatawa12/IdeaProjects/summaly/built/index.js:54:29)

twitter cardのimageが正しく読めていない

twitter cardでは<meta name="twitter:image" content="url" />の形式で指定されますが、summalyでは<meta property="twitter:image" content="url" />を期待してるようです。

https://github.com/syuilo/summaly/blob/b994e67281abc3faae53c888a232c84a4ea1a01d/src/general.ts#L30C1-L30C57

この結果、OGPが正しく設定されていないがtwitter cardが正しく指定されているVRChatのワールドのカードが正しく読み込まれていません。

https://vrchat.com/home/world/wrld_beddab1e-fee1-cafe-f00d-ca7c0dd1eca7

syuilo#151

キャッシュ機能を持たせる

MastodonのリンクプレビューがDDoS的であると話題になっている(?)

https://gigazine.net/news/20240502-mastodon-share-link-problem/

mastodon/mastodon#23662

summaly proxyをキャッシュサーバーとして捉えればこのような挙動は低減できるが、現状はそのような機能を正式にはサポートしていない (nginxを前段に抱えれば可能だが)

  • とりあえずfastifyの応答にcache-controlを付け加える
  • ただMisskeyが使うGotやnode-fetchはcache-controlを付け加えたところでちゃんとキャッシュが効かないため、summalyサーバーがインメモリ(Map)でsummaly結果を一定期間持っておくのが良いかも
    (summalyサーバーの実装がリッチになる副作用があるため、ファイルを分割するなどコードをそれに適したものに変えるべき)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.