Skip to content

Latest commit

 

History

2 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Arca User Ad Upgrade

아카라이브(arca.live) 목록 맨 위에 끼어드는 광고 행을 숨기거나, 숨기는 대신 그 광고가 어느 채널의 어떤 글인지를 목록에 채워 넣습니다.

Chromium(Chrome/Edge/Whale) 확장, Firefox 확장(.xpi), Tampermonkey 유저스크립트가 src/core.js 하나를 그대로 공유합니다. 권한은 하나도 요구하지 않습니다.

토글 버튼

광고 버튼 — 클릭하거나 Alt+A 를 누르면 두 모드가 번갈아 바뀝니다.

아이콘 모드 동작
눈 감김 bi-eye-slash-fill hide (기본) 광고 행을 목록에서 감춤
눈 뜸 bi-eye-fill label 광고 행을 남기고 채널 이름과 글 정보를 표시

이미지 미리보기 버튼 — 마우스를 올렸을 때 이미지를 띄울지 정합니다.

두 선택 모두 localStorage 에 저장되어 다음 방문에도 유지됩니다. .nav-control 이 없는 화면에서는 단축키만 동작합니다.

label 모드에서 보여주는 것

  • 채널 배지 — 먼저 arknights 같은 /b/* 의 * 부분이 즉시 뜨고, 대상을 받아오면 사람이 읽는 채널 이름(명일방주)으로 바뀝니다. 클릭하면 그 채널을 새 탭으로 열고, 마우스를 올리면 광고 원본 링크 전체가 툴팁으로 보입니다. 외부 사이트 광고면 도메인의 대표 이름을 보여줍니다.

    광고 링크 배지
    https://www.youtube.com/watch?v=… youtube
    https://theuselessweb.com/ theuselessweb
    https://news.bbc.co.uk/… bbc
  • 작성자 / 작성일 / 조회수 / 추천 — 추천 칸은 76/1 처럼 추천수/비추천수가 나오고, 마우스를 올리면 추천 76 / 비추천 1 / 댓글 20 이 툴팁으로 나옵니다.

  • 이미지 미리보기 — 마우스를 올리고 0.2초 뒤 커서 옆에 대표 이미지를 가로 128px 로 띄웁니다. 글에 이미지가 없으면 아무것도 띄우지 않습니다.

광고 행 판별

실제 arca.live HTML 에서 광고 행과 일반 공지는 클래스가 같습니다 (둘 다 <a class="vrow column notice notice-service">). 그래서 "첫 번째 행"이 아니라 아래 표식으로 구분합니다.

  • .vcol.col-ad 셀이 있음 (광고 배지)
  • <b id="textad"> 텍스트 광고 본문이 있음
  • .vcol.col-id 의 내용이 정확히 광고

일반 공지(<b>공지</b>, notice-board)와 앱 안내 공지는 건드리지 않습니다.

정보를 어디서 가져오나

광고 행의 HTML 에는 번호와 제목뿐이라 채널 이름/작성자/조회수/추천/이미지가 존재하지 않습니다. 그래서 label 모드일 때 광고가 가리키는 주소를 same-origin fetch 로 받아 옵니다.

광고 링크 받아오는 곳 얻는 것
/b/슬러그/글번호 (댓글 링크 /댓글번호#c_… 포함) 글 본문 전부
/b/슬러그 (채널 자체·검색 결과 등 글번호 없음) 채널 목록 채널 이름만
외부 도메인 받지 않음 도메인 이름만
항목 출처
채널 이름 .board-title a.title[data-channel-name]
작성자 .article-head .member-info .user-info
추천/비추천/댓글/조회수 .article-info 의 .head/.body 쌍
작성일 .article-info time[datetime]
이미지 .article-content img → 없으면 og:image

이미지가 없는 글에도 아카라이브는 og:image 로 사이트 로고(/static/apple-icon.png)를 넣기 때문에, 본문 이미지를 먼저 보고 /static/ 경로는 걸러냅니다. 채널 목록만 받아온 경우에는 채울 값이 없으므로 정보 행을 만들지 않습니다.

결과는 sessionStorage 에 5분간 캐시되고, 실패(로그인 요구, 삭제된 글, Cloudflare 검사 등) 하면 조용히 배지만 남기고 넘어갑니다. hide 모드에서는 요청을 아예 보내지 않습니다.

브라우저에서는 로그인/Cloudflare 통과 쿠키가 함께 나가므로 이 요청은 정상적으로 동작합니다(실제 Firefox/Chromium 에서 확인). 같은 주소를 스크립트로 직접 두드리면 Cloudflare 가 막지만, 그때도 목록이 깨지지 않고 배지만 남습니다.

설정

src/core.js 맨 위 CONFIG 에서 조절합니다(수정 후 node build.mjs).

옵션 기본값 설명
treatFirstServiceNoticeAsAd false 목록의 첫 번째 notice-service 행을 무조건 광고로 취급. 광고가 없는 날엔 앱 안내 공지가 대신 걸립니다
showToggleButton true .nav-control 에 토글 버튼 넣기
enableHotkey true Alt+A 로 광고 모드 전환
badgeShowPrefix false 채널 이름을 알기 전 임시 표시하는 슬러그에 /b/ 접두사 붙이기
badgeShowChannelSlug false 채널 이름 뒤에 슬러그를 괄호로 병기 (명일방주 (arknights))
fetchArticleInfo true 대상 페이지를 받아 채널 이름/작성자/조회수/추천을 채움 (끄면 슬러그 배지만)
hoverPreview true 이미지 미리보기의 초기값. 이후에는 토글 버튼으로 저장한 값이 우선
previewAllRows false 미리보기를 광고뿐 아니라 목록의 모든 글에 적용. 썸네일이 있는 글은 그대로 쓰고 없는 글만 본문을 받아오므로 요청이 늘어납니다
previewDelay 200 마우스를 올린 뒤 미리보기까지의 시간(ms)

설치

Tampermonkey (가장 간단)

userscript/arca-user-ad-upgrade.user.js 를 Tampermonkey 대시보드로 드래그하거나, 내용을 복사해 새 스크립트로 붙여넣고 저장합니다.

Chromium 계열

  1. chrome://extensions → 개발자 모드 켜기
  2. 압축해제된 확장 프로그램을 로드 → extension/ 폴더 선택

Firefox (.xpi)

  1. FIrefox 부가 기능에 Arca User Ad Upgrade를 검색해 Firefox를 통해 설치
  2. node build.mjs 를 실행해 나오는 dist/arca-user-ad-upgrade-1.0.0.xpi 로 직접 설치

개발

src/core.js                             # 소스
extension/manifest.json                 # MV3 (Chromium + Firefox 공용)
extension/content.js                    # 생성물
userscript/arca-user-ad-upgrade.user.js # 생성물
dist/arca-user-ad-upgrade-<버전>.xpi    # 생성물 (Firefox)
build.mjs                               # zip(.xpi) 생성

src/core.js 를 고친 뒤:

node build.mjs

설정은 arca.live origin 의 localStorage(arca-user-ad-upgrade:mode, arca-user-ad-upgrade:preview)에 저장되므로 확장과 유저스크립트가 같은 값을 씁니다. 받아온 페이지 정보는 arca-user-ad-upgrade:meta:* 로 sessionStorage 에 캐시됩니다.

About

A Chromium extension that improves arca.live’s user ad feature

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages