6

Steam API を利用する Python でいくつかのソフトウェアを開発しています。Flask を使用して Python コードを実行およびテストしています。すべてが順調に進んでいましたが、今ではこのエラーが発生しています (コードを変更していません):

('接続は中止されました。', error(10060, '接続先が一定時間後に適切に応答しなかったため、接続の試行が失敗したか、接続されたホストが応答しなかったために確立された接続が失敗しました'))

コードは完全に正常に動作していたのに突然エラーが発生し、コードやコンピューターまたは Flask で何も変更していないため、このエラーが発生する理由がわかりません。

コード:

import urllib
import itertools
import urllib2
import time
from datetime import datetime
from bs4 import BeautifulSoup
from flask import Flask
import requests
import json
import xml.etree.ElementTree as ET
from xml.dom.minidom import parseString
import sys


app = Flask(__name__)
API_KEY = 'XXX'
API_BASEURL = 'http://api.steampowered.com/'
API_GET_FRIENDS = API_BASEURL + 'ISteamUser/GetFriendList/v0001/?key='+API_KEY+'&steamid='
API_GET_SUMMARIES = API_BASEURL + 'ISteamUser/GetPlayerSummaries/v0002/?key='+API_KEY+'&steamids='
PROFILE_URL = 'http://steamcommunity.com/profiles/'
steamIDs = []
myFriends = []

class steamUser:
    def __init__(self, name, steamid, isPhisher):
        self.name = name
        self.steamid = steamid
        self.isPhisher = isPhisher

    def setPhisherStatus(self, phisher):
        self.isPhisher = phisher

@app.route('/DeterminePhisher/<steamid>')
def getFriendList(steamid):
    try:
        r = requests.get(API_GET_FRIENDS+steamid)
        data = r.json()
        for friend in data['friendslist']['friends']:
            steamIDs.append(friend['steamid'])
        return isPhisher(steamIDs)
    except requests.exceptions.ConnectionError as e:
        return str(e.message)

def isPhisher(ids):
    phisherusers = ''
    for l in chunksiter(ids, 50):
        sids = ','.join(map(str, l))
        try:
            r = requests.get(API_GET_SUMMARIES+sids)
            data = r.json();
            for i in range(len(data['response']['players'])):
                steamFriend = data['response']['players'][i]
                n = steamUser(steamFriend['personaname'], steamFriend['steamid'], False)
                if steamFriend['communityvisibilitystate'] and not steamFriend['personastate']:
                    url =  PROFILE_URL+steamFriend['steamid']+'?xml=1'
                    dat = requests.get(url)
                    if 'profilestate' not in steamFriend:
                        n.setPhisherStatus(True);
                        phisherusers = (phisherusers + ('%s is a phisher' % n.name) + ', ')
                    if parseString(dat.text.encode('utf8')).getElementsByTagName('privacyState'):
                        privacy = str(parseString(dat.text.encode('utf-8')).getElementsByTagName('privacyState')[0].firstChild.wholeText)
                        if (privacy == 'private'):
                            n.setPhisherStatus(True)
                            phisherusers = (phisherusers + ('%s is a phisher' % n.name) + ', ')
                elif 'profilestate' not in steamFriend:
                    n.setPhisherStatus(True);
                    phisherusers = (phisherusers + ('%s is a phisher' % n.name) + ', ')
                else:
                    steamprofile = BeautifulSoup(urllib.urlopen(PROFILE_URL+steamFriend['steamid']).read())
                    for row in steamprofile('div', {'class': 'commentthread_comment  '}):
                        comment = row.find_all('div', 'commentthread_comment_text')[0].get_text().lower()
                        if ('phisher' in comment) or ('scammer' in comment):
                            n.setPhisherStatus(True)
                            phisherusers = (phisherusers + ('%s is a phisher' % n.name) + ', ')
                myFriends.append(n);
        except requests.exceptions.ConnectionError as e:
            return str(e.message)
        except:
            return "Unexpected error:", sys.exc_info()[0]
    return phisherusers

def chunksiter(l, chunks):
    i,j,n = 0,0,0
    rl = []
    while n < len(l)/chunks:        
        rl.append(l[i:j+chunks])        
        i+=chunks
        j+=j+chunks        
        n+=1
    return iter(rl)

app.run(debug=True)

エラーの意味と、なぜこれが起こっているのかを説明したいと思います。前もって感謝します。本当に助かります。

4

3 に答える 3

0

私の経験では、特に同じコードが以前に機能していた場合、「接続されたパーティが一定期間後に応答しなかった」場合は、通常 MTU サイズに関連しています。通常、最大 MTU サイズを決定するだけで(リンクで説明されているように 28 バイトを追加することを忘れないでください) 、クライアント コンピューターでMTU サイズを変更できます。

于 2015-05-28T16:13:52.050 に答える