QML에서 Open Graph 메타 태그를 얻는 방법
물론 jsoup을 사용하는 라이브러리는 무궁무진했지만 그게 필요한 것이 아니었습니다. qt와 C++를 사용하고 싶었습니다.
"C++ 파서 메타 태그"쿼리를 입력하자마자 찾고 있던 모든 솔루션을 볼 수 있을 것이라고 생각했습니다.
그러나 실제로 모든 것이 조금 더 복잡합니다.
제가 한:
1) 단계를 준비하고 입력을 구문 분석하고 유효한 URL이 있는지 또는 텍스트만 있는지 결정합니다.
이 단계는 비용이 많이 드는 것 같습니다(입력에서 모든 것을 로드하는 것이 아니라
하지만 너무 추가 작업이라고 생각합니다)
static bool checkIsContainsHyperlink(QString line) {
static QRegularExpression regex(web_pattern);
QRegularExpressionMatch match = regex.match(line);
return match.hasMatch();
}
2) 리디렉션을 처리하는 기능으로 다운로드
많은 사이트에서 간단한 웹 페이지에 태그를 제공하지 않으며 내가 모르는 이유로 리디렉션을 사용하는 경우가 많습니다.
connect(&m_WebCtrl, SIGNAL (finished(QNetworkReply*)), this, SLOT (fileDownloaded(QNetworkReply*)));
QNetworkRequest request(url);
request.setAttribute(QNetworkRequest::RedirectPolicyAttribute, true);
m_WebCtrl.get(request);
3) 다운로드한 페이지를 저장하는 것이 이상해 보입니다. 이 페이지를 저장하는 이유는 아마도 당신을 놀라게 할 것입니다.
문제는 일부 사이트에서 특정 IP를 차단할 수 있어 많은 요청이 발생한다는 것입니다.
저에게는 URL 라인에서 3-5개의 기호를 변경하는 것으로 충분했고 몇 분 동안 금지되었습니다.
다운로드한 페이지를 캐싱하면 이 문제가 해결되었습니다.
connect(m_downloader_image, &FileDownloader::downloaded, [&, imagePathName]() {
QByteArray array = m_downloader_image->downloadedData();
if(!array.isEmpty()) {
QFile imageFile(imagePathName);
if(imageFile.open(QIODevice::WriteOnly)) {
imageFile.write(array);
m_result.og_image_local_path = imagePathName;
}
}
emit signalParserDone(m_result);
});
4) 파싱
이제 로컬 폴더에 웹 페이지가 있으므로 이를 구문 분석하고 필요한 것을 얻을 시간입니다.
불행히도 나에게 검보 파서는 매우 비우호적이었습니다.
그래서 먼저 정규식을 사용하기로 결정했고 나중에 다른 것으로 변경하기를 희망합니다.
QRegularExpression site_name_regex(og_site_name);
QRegularExpression title_regex(og_title);
QRegularExpression description_regex(og_description);
QRegularExpression url_regex(og_url);
QRegularExpression image_regex(og_image);
QRegularExpressionMatch match;
match = site_name_regex.match(html);
if (match.hasMatch()) {
res.og_site_name = match.captured(1);
}
match = title_regex.match(html);
if (match.hasMatch()) {
res.og_title = match.captured(1);
}
match = description_regex.match(html);
if (match.hasMatch()) {
res.og_description = match.captured(1);
}
match = url_regex.match(html);
if (match.hasMatch()) {
res.og_url = match.captured(1);
}
match = image_regex.match(html);
if (match.hasMatch()) {
res.og_image = match.captured(1);
}
마지막으로 URL 주소를 입력하고 미리보기와 제목을 즐길 수 있습니다.
here is the complete example (github)
Reference
이 문제에 관하여(QML에서 Open Graph 메타 태그를 얻는 방법), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/khomin/how-to-get-open-graph-meta-tags-in-qml-4fnb텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)