首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用python创建动态论坛签名生成器

用python创建动态论坛签名生成器
EN

Stack Overflow用户
提问于 2011-08-17 17:43:16
回答 1查看 889关注 0票数 2

我找了又找,但我只找到了涉及php的解决方案,而不是python/django。我的目标是做一个网站(后台编写的python),将允许用户输入一个字符串。然后运行后端脚本,并输出一个包含一些信息的字典。我想要的是使用字典中的信息将其绘制到我在服务器上的图像上,并将新图像提供给用户。我现在怎么离线做这件事?我可以使用哪些库?任何关于我应该走的路线的建议都会很好。

我仍然是一个新手,所以如果我的代码需要工作,请原谅我。到目前为止,我没有任何错误,但就像我说过的那样,我不知道下一步该怎么做才能实现我的目标。任何建议都将不胜感激。

这就是我想要的最终目标是http://combatarmshq.com/dynamic-signatures.html

这就是我到目前为止所拥有的(我在这里使用了漂亮的汤作为解析器。如果这太过分了,或者如果我用了不太好的方式,请让我知道是否有更好的替代方案。谢谢):

获取我想要的数字(这些是动态的)的url是这样的:http://combatarms.nexon.net/ClansRankings/PlayerProfile.aspx?user=

播放器的名称将位于user之后,因此示例为http://combatarms.nexon.net/ClansRankings/PlayerProfile.aspx?user=-aonbyte

这是抓取网站的基本功能的代码:

代码语言:javascript
复制
from urllib import urlopen
from BeautifulSoup import BeautifulSoup

def get_avatar(player_name):
    '''Return the players avatar as a binary string.'''
    player_name = str(player_name)
    url = 'http://combat.nexon.net/Avatar/MyAvatar.srf?'
    url += 'GameName=CombatArms&CharacterID=' + player_name
    sock = urlopen(url)
    data = sock.read()
    sock.close()
    return data

def save_avatar(data, file_name):
    '''Saves the avatar data from get_avatar() in png format.'''
    local_file = open(file_name + '.png', 'w' + 'b')
    local_file.write(data)
    local_file.close()

def get_basic_info(player_name):
    '''Returns basic player statistics as a dictionary'''
    url = 'http://combatarms.nexon.net/ClansRankings'
    url += '/PlayerProfile.aspx?user=' + player_name
    sock = urlopen(url)
    html_raw = sock.read()
    sock.close()
    html_original_parse = BeautifulSoup(''.join(html_raw))
    player_info = html_original_parse.find('div', 'info').find('ul')
    basic_info_list = range(6)
    for i in basic_info_list:
        basic_info_list[i] = str(player_info('li', limit = 7)[i+1].contents[1])
    basic_info = dict(date = basic_info_list[0], rank = basic_info_list[1], kdr = basic_info_list[2], exp = basic_info_list[3], gp_earned = basic_info_list[4], gp_current = basic_info_list[5])
    return basic_info

下面是测试这些函数的代码:

代码语言:javascript
复制
from grabber import get_avatar, save_avatar, get_basic_info

player = raw_input('Player name: ')
print 'Downloading avatar...'
avatar_data = get_avatar(player)
file_name = raw_input('Save as? ')
print 'Saving avatar as ' + file_name + '.png...'
save_avatar(avatar_data, file_name)
print 'Retrieving ' + player + '\'s basic character info...'
player_info = get_basic_info(player)
print ''
print ''
print 'Info for character named ' + player + ':'
print 'Character creation date: ' + player_info['date']
print 'Rank: ' + player_info['rank']
print 'Experience: ' + player_info['exp']
print 'KDR: ' + player_info['kdr']
print 'Current GP: ' + player_info['gp_current']
print ''
raw_input('Press enter to close...')
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-08-17 18:30:11

如果我理解正确的话,您希望从一个地方获取图像,从另一个地方获取一些文本信息,在图像上绘制文本,然后返回标记的图像。我说的对吗?

如果是这样,请获取PIL,即Python图像库。PIL和BeatifulSoup都能够直接从打开的URL中读取,所以您可以忘记套接字的胡言乱语。从超文本传输协议请求中获取播放器名称,打开图像,使用BeautifulSoup获取数据,使用PIL的文本函数在图像上写入,然后将图像保存回超文本传输协议响应中,就完成了。

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

https://stackoverflow.com/questions/7090773

复制
相关文章

相似问题

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