首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >InternetOpenUrl和IMDB

InternetOpenUrl和IMDB
EN

Stack Overflow用户
提问于 2014-02-28 20:17:47
回答 1查看 1.2K关注 0票数 0

我正在使用我在这里找到的代码从www.imdb.com获得电影标题,而且它工作得很好,但是由于imdb有某种地理位置,我需要弄清楚如何用"Accept-Language: en“头来强制英语的结果,但我不确定是否可以使用这段代码。有可能吗?

代码语言:javascript
复制
uses
  WinInet,
  StrUtils,
  SysUtils;

function GetHTMLTitle(const Url:string):string;
    const
    BuffSize     = 64*1024;
    TitleTagBegin='<title>';
    TitleTagEnd  ='</title>';
    var
      hInter   : HINTERNET;
      UrlHandle: HINTERNET;
      BytesRead: Cardinal;
      Buffer   : Pointer;
      i,f      : Integer;
    begin
      Result:='';
      hInter := InternetOpen('', INTERNET_OPEN_TYPE_PRECONFIG, nil, nil, 0);
      if Assigned(hInter) then
      begin
        GetMem(Buffer,BuffSize);
        try
           UrlHandle := InternetOpenUrl(hInter, PChar(Url), nil, 0, INTERNET_FLAG_RELOAD,0);
           try
            if Assigned(UrlHandle) then
            begin
              InternetReadFile(UrlHandle, Buffer, BuffSize, BytesRead);
              if BytesRead>0 then
              begin
                SetString(Result, PAnsiChar(Buffer), BytesRead);
                i:=Pos(TitleTagBegin,Result);
                if i>0 then
                begin
                  f:=PosEx(TitleTagEnd,Result,i+Length(TitleTagBegin));
                  Result:=Copy(Result,i+Length(TitleTagBegin),f-i-Length(TitleTagBegin));
                end;
              end;
            end;
           finally
             InternetCloseHandle(UrlHandle);
           end;
        finally
          FreeMem(Buffer);
        end;
        InternetCloseHandle(hInter);
      end
    end;

procedure TForm1.Button1Click(Sender: TObject);
var
  Title : string;
begin
  Title := GetHTMLTitle('http://www.imdb.com/title/tt1490017/');
  Label1.Caption := Copy(Title, 1, LastDelimiter(')', Title));
end;
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-03-01 00:49:33

InternetOpenUrl()的第三个参数允许您指定自定义标头,例如:

代码语言:javascript
复制
UrlHandle := InternetOpenUrl(hInter, PChar(Url), 'Accept-Language: en', -1, INTERNET_FLAG_RELOAD,0);

顺便说一句,不能保证InternetReadFile()会在一个缓冲区中返回所有内容。您应该在循环中调用它,将每个缓冲区附加到本地缓存,直到缓存了所需的所有内容,然后根据需要处理缓存。

更新:IMDB确实使用IP地理定位,因此显然它不像以前那样使用Accept-Language。您必须根据以下情况调整HTTP请求:

为什么我看到的标题与以前不同的语言?

我们最近修改了标题在网站上的显示方式。在默认情况下,用户现在将看到在本国发行的语言中列出的标题(即美国用户将看到在北美发行的标题下列出的电影,而浏览法国网站的用户将看到这些电影在法国发行时出现的标题等)。如果您在IMDb.com上注册,并且希望看到原始标题,或者默认情况下在任何其他语言/发行国中看到标题,您可以相应地设置您的用户首选项。 为此,请单击“您的帐户”链接(位于IMDb.com上每个页面的右上角),然后单击“站点首选项”选项,或直接转到https://secure.imdb.com/register-imdb/siteprefs,然后从“标题显示国家”和“标题显示语言”下拉菜单中选择所需的选项。单击“确定”以保存您的选择。 有关更多帮助/信息,请参考我们的网站首选项帮助页面。 请记住,如果您通过以下URL访问该网站,则无论您的登录状态或网站首选项如何,您都会看到在其原始标题下列出的影片: http://akas.imdb.com

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22105013

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档