로 단어의 의미를 알아내기 위해 Firefox
// Chrome
... 전체를 호출하고 싶지 않았기 때문에 다운로드한 파일의 내용을 가져오고 다운로드한 파일에서 번역을 가져오는 코드 를 작성하기로 결정했습니다 . 하지만 첫 번째 단계에서 막혔습니다.Opera
Google translate
shell script
wget
translate.google.hu
예를 들어, 단어의 번역(eng에서 hun으로)을 알고 싶다면'열성가'나는 노력할 것이다
$ wget https://translate.google.hu/?hl=hu&tab=wT#en/hu/Enthusiast
그런데 wget
내가 입력한 페이지는 다운로드가 되지 않아요
내 브라우저 주소 표시줄로 이동합니다. 대신 나는 다음을 얻습니다.
solid@skynet:~> wget https://translate.google.hu/?hl=hu&tab=wT#en/hu/Enthusiast
[1] 2143
solid@skynet:~> --2016-05-02 08:23:24-- https://translate.google.hu/?hl=hu
Resolving translate.google.hu (translate.google.hu)... 216.58.209.163, 2a00:1450:400d:806::2003
Connecting to translate.google.hu (translate.google.hu)|216.58.209.163|:443... connected.
HTTP request sent, awaiting response... 403 Forbidden
2016-05-02 08:23:24 ERROR 403: Forbidden.
기다리고, 기다리고, 기다리고 있었는데... 마침내 Enter 키를 눌렀습니다.
[1]+ Exit 8 wget https://translate.google.hu/?hl=hu
누구든지 내 문제를 해결할 수 있나요?
(저는 OpenSuse Linux 13.2를 사용하고 있습니다)
고쳐 쓰다[Alexander Batischev]에 따르면 나는 시도했습니다
$ wget 'https://translate.google.hu/?hl=hu&tab=wT#en/hu/Enthusiast'
백그라운드에서 실행되고 올바른 주소를 wget에 전달하는 문제를 해결합니다(로컬 변수 'tab'을 생성하는 대신) ^.^'
하지만다음까지 동일한 오류가 발생합니다 Forbidden
.
$ wget 'https://translate.google.hu/?hl=hu&tab=wT#en/hu/Enthusiast'
--2016-05-03 14:57:48-- https://translate.google.hu/?hl=hu&tab=wT
Resolving translate.google.hu (translate.google.hu)... 216.58.209.163, 2a00:1450:400d:806::2003
Connecting to translate.google.hu
(translate.google.hu)|216.58.209.163|:443... connected. HTTP request
sent, awaiting response... 403 Forbidden
2016-05-03 14:57:48 ERROR 403: Forbidden.
답변1
이 명령을 실행하면:
wget https://translate.google.hu/?hl=hu&tab=wT#en/hu/Enthusiast
실제로 일어나는 일은 다음과 같습니다.
- 실행 중인 URL
wget
은 "https://translate.google.hu/?hl=hu"; - & 기호는
wget
백그라운드에서 실행된다는 의미입니다. tab
라는 변수를 정의하고 값을 가져옵니다wT#en/hu/Enthusiast
.
그 이유는 쉘이 앰퍼샌드를 포함한 특별한 문자를 위해 일부 문자를 예약해두기 때문입니다. 쉘이 앰퍼샌드를 해석하지 못하도록 하려면 따옴표를 사용하십시오.
wget 'https://translate.google.hu/?hl=hu&tab=wT#en/hu/Enthusiast'
해결된 후에도 여전히 "금지됨" 응답을 받게 됩니다.
인터페이스를 우회하려는 고객과 그렇지 않은 제공업체 간의 경쟁입니다. Google은 광고에서 수익을 얻으며 스크립트에 아무 것도 표시되지 않는다는 것을 알고 있습니다. 따라서 브라우저를 통한 접근 이외의 접근을 차단하는 조치를 취하고 있습니다.
귀하가 '금지'된 이유를 정확히 알려줄 수 있는 유일한 사람은 Google 엔지니어입니다. 즉, 더 간단한 기술이 알려져 있습니다.
가장 쉬운 방법 중 하나는 "사용자 에이전트 문자열"을 통해 차단하는 것입니다. 이는 클라이언트(브라우저 또는 wget)의 브랜드와 버전을 식별하는 문자열입니다. 다음과 같습니다.
Wget/1.16.3 (linux-gnu)
클라이언트는 모든 요청과 함께 이 문자열을 보냅니다. 서버는 이를 사용하여 귀하의 경우처럼 결과의 모양을 조정하거나 액세스를 거부할 수 있습니다.
wget
--user-agent
전송할 사용자 에이전트 문자열을 지정할 수 있는 허용 플래그입니다. 자신의 브라우저를 모방하려면 동일한 Google에 "내 사용자 에이전트가 무엇인가요?"를 입력하고 거기에서 문자열을 복사하면 됩니다. :) 그런 다음 wget
다음과 같이 전달하면 됩니다.
wget --user-agent='Mozilla/5.0 (Windows NT 6.3; WOW64; rv:41.0) Gecko/20100101 Firefox/41.0' \
'https://translate.google.hu/?hl=hu&tab=wT#en/hu/Enthusiast'
답변2
문제의 한 측면은 &와 같은 쉘 명령의 문제를 피하기 위해 따옴표를 사용해야 한다는 것입니다. 그러나 그것이 유일한 문제는 아닙니다. 많은 웹사이트에서는 wget과 같은 봇이나 프로그램을 사용하는 경우 서비스를 거부합니다. 따라서 사용자 에이전트를 변경해야 합니다.
가다:
웹사이트에는 귀하의 브라우저 사용자 이름이 표시됩니다. 그런 다음 다음을 실행하십시오.
wget -U "Mozilla/5.0 (iPad; U; CPU OS 3_2_1 like Mac OS X; en-us) AppleWebKit/531.21.10 (KHTML, like Gecko) Mobile/7B405" 'https://translate.google.hu/?hl=hu&tab=wT#en/hu/Enthusiast' -O Enthusiast.html
더 현명한 선택은 Google Chrome을 사용하는 것입니다. Chrome을 열고 F12를 누르고 다음으로 이동하세요.https://translate.google.com/. 그런 다음 첫 번째 요청(translate.google.com)을 마우스 오른쪽 버튼으로 클릭하고 'cURL로 복사'를 선택하세요. 그런 다음 이 명령을 사용하여 Google Chrome을 사용하는 것처럼 (거의) 페이지를 요청할 수 있습니다. cURL에서 "-o"를 사용하여 파일로 저장하거나 명령을 wget에서 사용 가능한 명령으로 변환할 수 있습니다.
Chrome의 이 기능은 아래에 설명되어 있습니다.
http://www.lornajane.net/posts/2013/chrome-feature-copy-as-curl
때때로 "금지됨" 메시지를 받은 경우 해당 사이트에 요청을 계속 보내기 전에 일정 시간 동안 기다리거나 브라우저를 사용하여 사이트에 액세스하고 확인 코드와 같은 질문에 답해야 한다는 점에 유의하십시오.
마지막으로, 특정 방식으로 사용하기 전에 서비스 약관을 확인해야 합니다. 제대로 하고 계신지 모르겠으니 직접 확인해 보시기 바랍니다.
답변3
이 솔루션선택한 텍스트를 Google 번역으로 보내고, wget
바로가기를 사용하여 실행할 수 있는 스크립트를 만들어 결과를 얻고 표시합니다. (제가 언급하지 않은 버그로 인해 Zenity 기반 스크립트가 작동하지 않는 것 같습니다.)
아직 설치하지 않은 경우 몇 가지 도구를 설치하세요.
sudo apt-get install libnotify-bin wget xsel xclip
선택 항목을 번역하고 결과를 팝업 데스크톱 알림으로 제공하는 스크립트:
gedit notitrans
그리고:
#!/usr/bin/env bash
notify-send --icon=info "$(xsel -o)" "$(wget -U "Mozilla/5.0" -qO - "http://translate.googleapis.com/translate_a/single?client=gtx&sl=auto&tl=en&dt=t&q=$(xsel -o | sed "s/[\"'<>]//g")" | sed "s/,,,0]],,.*//g" | awk -F'"' '{print $2, $6}')"
실행 가능하게 만들어라
chmod +x ~/notitrans
다음과 같이 이동하세요.
sudo mv ~/notitrans /usr/local/bin/
스크립트데스크톱 알림에 번역을 표시하고 자동으로 클립보드에 번역을 복사합니다.:
#!/usr/bin/env bash
text="$(xsel -o)"
translate="$(wget -U "Mozilla/5.0" -qO - "http://translate.googleapis.com/translate_a/single?client=gtx&sl=auto&tl=en&dt=t&q=$(echo $text | sed "s/[\"'<>]//g")" | sed "s/,,,0]],,.*//g" | awk -F'"' '{print $2, $6}')"
echo "$translate" | xclip -selection clipboard
notify-send --icon=info "$text" "$translate"
실행 가능하게 만드세요.
위 내용은 영어로 번역됩니다. en
다음 변경 사항에 따라 다른 것으로 교체 하려면두 글자 코드.