모듈 토크:Commons 링크

Module talk

코드 리뷰?

@RexS: Mike Peel의 토크 페이지에서 했던 토론 기억나세요?여러 Wikidata 속성에 대해 크로스 체크를 수행하여 Commons 갤러리 또는 카테고리(또는 둘 다)를 검색하기 위해 Lua 코드를 구현했습니다.현재 {{commons and category} 및 {{commons and category-inline}에서 사용되고 있는 모듈입니다.{{commons-inline}}, 아마도 {{commons category}}에 사용하고 싶습니다.제가 무슨 일을 하기 전에 코드를 보시고 피드백을 주시겠습니까?여느 때처럼, 시험지는 여기 있습니다.도움이 되거나 제안해 주셔서 감사합니다!- hike395 (대화)2020년 3월 15일 (UTC)응답[응답]

@Hike395: 모듈 토크에서 방금 결과를 확인했습니다.Commons 링크/테스트 케이스는 상당히 포괄적이고 정확해 보입니다.모듈에서의 코드도 확인했습니다.Commons 링크도 좋고 보기에도 좋습니다.코드의 대부분은 과거에 사용한 기능과 비슷하기 때문에 당신의 알고리즘이 정확하다고 확신합니다.제가 예상하는 유일한 문제는 에디터가 코드를 오용하는 경우입니다.또한 함수가 에러 메시지와 함께 실패하도록 내버려 둘 것인지, 아니면 에러를 포착하여 함수가 null로 계속되도록 할 것인지를 결정해야 합니다.예를 들어 다음과 같습니다.
  • {{#invoke:Commons link getGallery qid=Q0 search=}} ID "Q0" 시스템에서 알 수 없습니다. 올바른 엔티티 ID를 사용하십시오(← 잘못된 엔티티 ID).
  • {{#invoke:Commons link getGallery qid=Q68979196 search=}}→ [[일반:스페셜:검색/ ](← entity-id는 존재하지만 링크가 없음)
보통 15번 라인과 같은 지역 기능을 악용할 수 있는지 스스로 생각해 보아야 합니다.qid = mw.wikibase.getEntityIdForCurrentPage()– 연결된 엔티티가 없는 페이지에서 코드가 실행될 수 있습니까?ID? 그렇다면 16행에서 qid가 0으로 반환되면 어떻게 됩니까?20행에서도 마찬가지로,mw.wikibase.sitelink(qid)어떻게든 0(시트링크 없음)을 반환한다.덧붙여서, 최신 콜을 사용하는 것을 추천합니다.mw.wikibase.getSitelink최신인 반면mw.wikibase.sitelink는 레거시 에일리어스이므로 새 코드에서는 사용할 수 없습니다(MW 단위:내선번호:Wikibase Client/Lua #레거시 에일리어스).
어쨌든, 오류를 발견하는 편집자로부터 피드백을 받을 준비가 되어 있는 한, 프로덕션 환경에 코드를 도입하는 것에 대해서는 거리낌이 없습니다. 몰트케를 바꿔 말하면, "사용자와의 접촉에서 살아남는 코드는 없다."건배 --RexS (토크) 2020년 3월 15일 (UTC)응답[응답]
@RexxS: 코드 리뷰 감사합니다!대부분의 코드에는 체크가 전혀 없습니다(모듈의 코드로부터 코드 fragment를 많이 복사했기 때문입니다).위키데이터IB) 발견된 나머지 문제를 정리하고 문제를 해결하기 위한 테스트를 추가했습니다.다음으로 Template talk에서의 사용을 제안합니다.커먼 인라인다시 한 번 고마워!- hike395 (대화) 00:40, 2020년 3월 16일 (UTC)응답[응답]
@Hike395: 코드를 확인할 수 있는 충분한 Lua는 없지만, 다른 방법을 제안하고 싶다.이상적인 세계에서는 다음과 같은 행동을 원합니다.
  1. 갤러리 링크가 있는 경우 해당 링크를 표시합니다.
  2. 카테고리 링크가 있는 경우는, 그 링크를 표시합니다(갤러리 링크에 가세해 양쪽 모두 사용 가능한 경우).
  3. 항목 내부(P7561) 대한 범주 통과와 같은 추가 범주 링크가 있는 경우 해당 링크도 표시합니다.
  4. 그렇지 않으면 검색 링크를 표시합니다.
  5. 사용 중인 옵션을 나타내는 추적 카테고리 및 로컬로 정의된 경우 추가 추적 카테고리 포함.
{Commons}, {{Commons category}, {{Commons and category}}의 결합을 의미한다고 생각합니다.이것들은 좋은 Lua 백엔드가 있으면 간단하게 실행할 수 있습니다.개인적으로는 시트링크를 위해 Commons 카테고리(P373) Commons Gallery(P935)대한 지원을 가능한 한 빨리 중단하고 싶지만, 현재로서는 예비 옵션을 유지하는 것이 좋을 것 같습니다.감사해요.마이크 필 (대화)2020년 3월 17일 (UTC)응답[응답]
@Mike 필 및 RexxS:모듈의 함수를 사용하여 제안사항을 작성할 수 있습니다.(1), (2), (4)의 조합이 매우 마음에 듭니다.갤러리와 카테고리 링크 중 하나를 보여주려고 했는데 둘 다 존재한다면 둘 다 보여주자고 제안했다는 점만 빼면 {Commons-inline}에서 제가 하고 싶은 것과 거의 비슷합니다.아마 가장 쉬운 방법은 {Commons and category}와 {{Commons and category-inline}}의 동작을 당신의 제안을 반영하여 변경하는 것입니다.
(1)과 (2)를 모두 수행하려면 Commons 카테고리(P373) Commons Gallery(P935)를 모두 유지해야 합니다.이것은 Commons sitelink를 보완하는 것이 필요하기 때문입니다.Commons sitelink는 갤러리 또는 카테고리만 저장할 수 있지만 둘 다 저장할 수는 없습니다.- hike395 (대화) 2020년 3월 18일 01:11 (UTC)응답[응답]
@Mike 필 및 RexxS:재미삼아 Mike 아이디어의 일부를 실행했다[ (1) 、 ( 2 ) 、 ( 4 ) 。그것은 꽤 쉬웠다.샌드박스 모듈의 getGalleryAndCategory()에 넣고 {{Commons and category/sandbox}를 업데이트하여 사용하였습니다.이것을 채용하면, 갤러리와 카테고리 중 하나가 정확하게 있으면, 다른 하나를 검색하는 것이 아니라, {Commons and category}의 동작이 바뀝니다.둘 다 없는 경우 둘 다 검색할 수 있습니다.
추가 크레딧을 위해 {{Commons}와 {{Commons category}}}가 {{Commons and category}}의 포장지가 될 수 있도록 작성하였습니다.{{Commons}}의 동작이 변경됩니다(카테고리 링크가 표시될 수 있습니다).{{Commons category}} 동작이 변경됩니다(갤러리 링크가 표시될 수 있습니다).하지만 잘 될 거야
WDYT? — hike395 (토크) 2020년 3월 18일 (UTC)응답[응답]
@Hike395: 저는 이것이 마음에 듭니다.더 넓은 커뮤니티도 마찬가지였으면 좋겠습니다.갤러리와 카테고리의 양쪽 사이트 링크에서 Wikidata의 표준 설정은 Czarnca(Q2322184)와 같습니다(랜덤 예시로 어제 편집한 마지막 예).여기서 갤러리 사이트 링크 Czarnca(Q2322184)에서 취득하고 토픽의 메인 카테고리(P910)에서 Category:Czarnca(Q87840009)까지 추적하여 카테고리 사이트 링크를 취득할 수 있습니다.카테고리에서는 카테고리의 메인토픽(P301)을 통해 역방향으로 네임스페이스 체크를 실시해야 합니다.이 경우 Commons 카테고리(P373) Commons Gallery(P935)유지할 필요가 없습니다(다른 항목은 아직 정리 중입니다).감사해요.Mike Peel (토크) 2020년 3월 18일 (UTC)응답[응답]

Lua 오류

일부 문서에는 "Lua error: bad 인수 #1 to 'getBest Statements'(string expected, got nero)가 표시되어 있습니다.: 페이스트리, 리모트 컨트롤.그 이유는qid는 제로이다.mw.wikibase.getBestStatements(qid, "P373")184호선에 있습니다.하이크395가 조사해주길 바란다Johnuniq (대화) 10:28, 2021년 8월 2일 (UTC)응답[응답]

그게 뭔지 알아.지금 수정 준비 중입니다.- hike395 (대화) 12:56, 2021년 8월 2일 (UTC)응답[응답]
수정 --- 페이스트리를 확인하기 위해 테스트 케이스를 추가했습니다.- hike395 (토크) 13:11, 2021년 8월 2일 (UTC)응답[응답]