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

发布于 2024-11-30 06:40:36 字数 3074 浏览 1 评论 0原文

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

我还是个新手,所以如果我的代码需要工作,请原谅我。到目前为止,我所拥有的没有任何错误,但就像我说的,我不知道下一步该去哪里实现我的目标。任何提示将不胜感激。

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

这就是我到目前为止所拥有的(我在这里使用 beautiful soup 作为解析器。如果这太过分了或者如果我做得不太好,请让我知道是否有更好的选择。谢谢):

网址我得到了我想要的数字(这些是动态的)是这样的: http:// Combatarms.nexon.net/ClansRankings/PlayerProfile.aspx?user=

玩家的名字将出现在 user 之后,因此示例是 http://combatarms.nexon.net/ClansRankings/PlayerProfile.aspx?user=-aonbyte

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

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

这是测试这些功能的代码:

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...')

I have searched and searched but I have only found solutions involving php and not python/django. My goal is to make a website (backend coded in python) that will allow a user to input a string. The backend script would then be run and output a dictionary with some info. What I want is to use the info from the dictionary to sort of draw it onto an image I have on the server and give the new image to the user. How can I do this offline for now? What libraries can I use? Any suggestions on the route I should head on would be lovely.

I am still a novice so please forgive me if my code needs work. So far I have no errors with what I have but like I said I have no clue where to go next to achieve my goal. Any tips would be greatly appreciated.

This is sort of what I want the end goal to be http://combatarmshq.com/dynamic-signatures.html

This is what I have so far (I used beautiful soup as a parser from here. If this is too excessive or if I did it in a not so good way please let me know if there is a better alternative. Thanks):

The url where I'm getting the numbers I want (These are dynamic) is this: http://combatarms.nexon.net/ClansRankings/PlayerProfile.aspx?user=

The name of the player will go after user so an example is http://combatarms.nexon.net/ClansRankings/PlayerProfile.aspx?user=-aonbyte

This is the code with the basic functions to scrape the website:

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

And here is the code that tests out those functions:

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...')

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

寂寞笑我太脆弱 2024-12-07 06:40:36

如果我理解正确的话,您想从一个地方获取一张图像,从另一个地方获取一些文本信息,在图像的顶部绘制文本,然后返回标记的图像。我有这个权利吗?

如果是这样,请获取 PIL(Python 图像库)。 PIL 和 BeatifulSoup 都能够直接从打开的 URL 读取,因此您可以忘记套接字废话。从 HTTP 请求中获取玩家名称,打开图像,使用 BeautifulSoup 获取数据,使用 PIL 的文本函数在图像上写入,将图像保存回 HTTP 响应中,就完成了。

If I understand you correctly, you want to get an image from one place, get some textual information from another place, draw text on top of the image, and then return the marked-up image. Do I have that right?

If so, get PIL, the Python Image Library. Both PIL and BeatifulSoup are capable of reading directly from an opened URL, so you can forget that socket nonsense. Get the player name from the HTTP request, open the image, use BeautifulSoup to get the data, use PIL's text functions to write on the image, save the image back into the HTTP response, and you're done.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文