Skip to content

Commit

Permalink
Merge branch 'release/37.2.0'
Browse files Browse the repository at this point in the history
  • Loading branch information
alaingilbert committed May 7, 2020
2 parents 29742c7 + 4967fdf commit 48e08c8
Show file tree
Hide file tree
Showing 10 changed files with 529 additions and 0 deletions.
2 changes: 2 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -123,6 +123,8 @@ GetMoon(interface{}) (Moon, error)
GetCelestial(interface{}) (Celestial, error)
GetCelestials() ([]Celestial, error)
Abandon(interface{}) error
CollectAllMarketplaceMessages() error
CollectMarketplaceMessage(MarketplaceMessage) error
GetExpeditionMessages() ([]ExpeditionMessage, error)
GetExpeditionMessageAt(time.Time) (ExpeditionMessage, error)
GetEspionageReportMessages() ([]EspionageReportSummary, error)
Expand Down
5 changes: 5 additions & 0 deletions extractor_v6.go
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,11 @@ func NewExtractorV6() *ExtractorV6 {
return &ExtractorV6{}
}

// ExtractMarketplaceMessages ...
func (e ExtractorV6) ExtractMarketplaceMessages(pageHTML []byte, location *time.Location) ([]MarketplaceMessage, int64, error) {
panic("implement me")
}

// ExtractExpeditionMessages ...
func (e ExtractorV6) ExtractExpeditionMessages(pageHTML []byte, location *time.Location) ([]ExpeditionMessage, int64, error) {
panic("implement me")
Expand Down
11 changes: 11 additions & 0 deletions extractor_v7.go
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,12 @@ func (e ExtractorV7) ExtractExpeditionMessages(pageHTML []byte, location *time.L
return e.ExtractExpeditionMessagesFromDoc(doc, location)
}

// ExtractMarketplaceMessages ...
func (e ExtractorV7) ExtractMarketplaceMessages(pageHTML []byte, location *time.Location) ([]MarketplaceMessage, int64, error) {
doc, _ := goquery.NewDocumentFromReader(bytes.NewReader(pageHTML))
return e.ExtractMarketplaceMessagesFromDoc(doc, location)
}

// ExtractDefense ...
func (e ExtractorV7) ExtractDefense(pageHTML []byte) (DefensesInfos, error) {
doc, _ := goquery.NewDocumentFromReader(bytes.NewReader(pageHTML))
Expand Down Expand Up @@ -143,6 +149,11 @@ func (e ExtractorV7) ExtractExpeditionMessagesFromDoc(doc *goquery.Document, loc
return extractExpeditionMessagesFromDocV7(doc, location)
}

// ExtractMarketplaceMessagesFromDoc ...
func (e ExtractorV7) ExtractMarketplaceMessagesFromDoc(doc *goquery.Document, location *time.Location) ([]MarketplaceMessage, int64, error) {
return extractMarketplaceMessagesFromDocV7(doc, location)
}

// ExtractFacilitiesFromDoc ...
func (e ExtractorV7) ExtractFacilitiesFromDoc(doc *goquery.Document) (Facilities, error) {
return extractFacilitiesFromDocV7(doc)
Expand Down
1 change: 1 addition & 0 deletions extracts.go
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,7 @@ type Extractor interface {
ExtractOfferOfTheDay(pageHTML []byte) (int64, string, PlanetResources, Multiplier, error)
ExtractResourcesBuildings(pageHTML []byte) (ResourcesBuildings, error)
ExtractExpeditionMessages(pageHTML []byte, location *time.Location) ([]ExpeditionMessage, int64, error)
ExtractMarketplaceMessages(pageHTML []byte, location *time.Location) ([]MarketplaceMessage, int64, error)
ExtractDefense(pageHTML []byte) (DefensesInfos, error)
ExtractShips(pageHTML []byte) (ShipsInfos, error)
ExtractFacilities(pageHTML []byte) (Facilities, error)
Expand Down
29 changes: 29 additions & 0 deletions extracts_v7.go
Original file line number Diff line number Diff line change
Expand Up @@ -699,3 +699,32 @@ func extractExpeditionMessagesFromDocV7(doc *goquery.Document, location *time.Lo
})
return msgs, nbPage, nil
}

func extractMarketplaceMessagesFromDocV7(doc *goquery.Document, location *time.Location) ([]MarketplaceMessage, int64, error) {
msgs := make([]MarketplaceMessage, 0)
nbPage, _ := strconv.ParseInt(doc.Find("ul.pagination li").Last().AttrOr("data-page", "1"), 10, 64)
doc.Find("li.msg").Each(func(i int, s *goquery.Selection) {
if idStr, exists := s.Attr("data-msg-id"); exists {
if id, err := strconv.ParseInt(idStr, 10, 64); err == nil {
href := s.Find("a.js_actionCollect").AttrOr("href", "")
m := regexp.MustCompile(`token=([^&]+)`).FindStringSubmatch(href)
var token string
var marketTransactionID int64
if len(m) == 2 {
token = m[1]
}
m = regexp.MustCompile(`marketTransactionId=([^&]+)`).FindStringSubmatch(href)
if len(m) == 2 {
marketTransactionIDStr := m[1]
marketTransactionID, _ = strconv.ParseInt(marketTransactionIDStr, 10, 64)
}
msg := MarketplaceMessage{ID: id}
msg.CreatedAt, _ = time.ParseInLocation("02.01.2006 15:04:05", s.Find(".msg_date").Text(), location)
msg.Token = token
msg.MarketTransactionID = marketTransactionID
msgs = append(msgs, msg)
}
}
})
return msgs, nbPage, nil
}
2 changes: 2 additions & 0 deletions interfaces.go
Original file line number Diff line number Diff line change
Expand Up @@ -81,6 +81,8 @@ type Wrapper interface {
GetCelestial(interface{}) (Celestial, error)
GetCelestials() ([]Celestial, error)
Abandon(interface{}) error
CollectAllMarketplaceMessages() error
CollectMarketplaceMessage(MarketplaceMessage) error
GetExpeditionMessages() ([]ExpeditionMessage, error)
GetExpeditionMessageAt(time.Time) (ExpeditionMessage, error)
GetEspionageReportMessages() ([]EspionageReportSummary, error)
Expand Down
72 changes: 72 additions & 0 deletions ogame.go
Original file line number Diff line number Diff line change
Expand Up @@ -3738,6 +3738,14 @@ type ExpeditionMessage struct {
CreatedAt time.Time
}

// MarketplaceMessage ...
type MarketplaceMessage struct {
ID int64
CreatedAt time.Time
Token string
MarketTransactionID int64
}

func (b *OGame) getPageMessages(page, tabid int64) ([]byte, error) {
payload := url.Values{
"messageId": {"-1"},
Expand Down Expand Up @@ -3794,6 +3802,60 @@ func (b *OGame) getExpeditionMessages() ([]ExpeditionMessage, error) {
return msgs, nil
}

func (b *OGame) collectAllMarketplaceMessages() error {
purchases, _ := b.getMarketplacePurchasesMessages()
sales, _ := b.getMarketplaceSalesMessages()
msgs := make([]MarketplaceMessage, 0)
msgs = append(msgs, purchases...)
msgs = append(msgs, sales...)
for _, msg := range msgs {
if msg.MarketTransactionID != 0 {
err := b.collectMarketplaceMessage(msg)
if err != nil {
return err
}
}
}
return nil
}

func (b *OGame) collectMarketplaceMessage(msg MarketplaceMessage) error {
payload := url.Values{
"page": {"componentOnly"},
"component": {"marketplace"},
"action": {"collectPrice"},
"marketTransactionId": {strconv.FormatInt(msg.MarketTransactionID, 10)},
"token": {msg.Token},
"asJson": {"1"},
}
_, err := b.postPageContent(url.Values{"page": {"messages"}}, payload)
return err
}

func (b *OGame) getMarketplacePurchasesMessages() ([]MarketplaceMessage, error) {
return b.getMarketplaceMessages(26)
}

func (b *OGame) getMarketplaceSalesMessages() ([]MarketplaceMessage, error) {
return b.getMarketplaceMessages(27)
}

// tabID 26: purchases, 27: sales
func (b *OGame) getMarketplaceMessages(tabID int64) ([]MarketplaceMessage, error) {
var tabid int64 = tabID
var page int64 = 1
var nbPage int64 = 1
msgs := make([]MarketplaceMessage, 0)
for page <= nbPage {
pageHTML, _ := b.getPageMessages(page, tabid)
newMessages, newNbPage, _ := b.extractor.ExtractMarketplaceMessages(pageHTML, b.location)
msgs = append(msgs, newMessages...)
nbPage = newNbPage
page++
}
return msgs, nil
}

func (b *OGame) getExpeditionMessageAt(t time.Time) (ExpeditionMessage, error) {
var tabid int64 = 22
var page int64 = 1
Expand Down Expand Up @@ -4709,6 +4771,16 @@ func (b *OGame) GetExpeditionMessageAt(t time.Time) (ExpeditionMessage, error) {
return b.WithPriority(Normal).GetExpeditionMessageAt(t)
}

// CollectAllMarketplaceMessages collect all marketplace messages
func (b *OGame) CollectAllMarketplaceMessages() error {
return b.WithPriority(Normal).CollectAllMarketplaceMessages()
}

// CollectMarketplaceMessage collect marketplace message
func (b *OGame) CollectMarketplaceMessage(msg MarketplaceMessage) error {
return b.WithPriority(Normal).CollectMarketplaceMessage(msg)
}

// GetEspionageReportMessages gets the summary of each espionage reports
func (b *OGame) GetEspionageReportMessages() ([]EspionageReportSummary, error) {
return b.WithPriority(Normal).GetEspionageReportMessages()
Expand Down
9 changes: 9 additions & 0 deletions ogame_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -897,6 +897,15 @@ func TestExtractExpeditionMessages(t *testing.T) {
msgs[0].Content)
}

func TestExtractMarketplaceMessages(t *testing.T) {
pageHTMLBytes, _ := ioutil.ReadFile("samples/v7.2/en/sales_messages.html")
msgs, _, _ := NewExtractorV7().ExtractMarketplaceMessages(pageHTMLBytes, time.FixedZone("OGT", 3600))
assert.Equal(t, 9, len(msgs))
assert.Equal(t, int64(12912161), msgs[3].ID)
assert.Equal(t, int64(1379), msgs[3].MarketTransactionID)
assert.Equal(t, "164ba9f6e5cbfdaa03c061730767d779", msgs[3].Token)
}

func TestExtractEspionageReportMessageIDs(t *testing.T) {
pageHTMLBytes, _ := ioutil.ReadFile("samples/messages.html")
msgs, _ := NewExtractorV6().ExtractEspionageReportMessageIDs(pageHTMLBytes)
Expand Down
14 changes: 14 additions & 0 deletions prioritize.go
Original file line number Diff line number Diff line change
Expand Up @@ -462,6 +462,20 @@ func (b *Prioritize) GetEspionageReportMessages() ([]EspionageReportSummary, err
return b.bot.getEspionageReportMessages()
}

// CollectAllMarketplaceMessages collect all marketplace messages
func (b *Prioritize) CollectAllMarketplaceMessages() error {
b.begin("CollectAllMarketplaceMessages")
defer b.done()
return b.bot.collectAllMarketplaceMessages()
}

// CollectMarketplaceMessage collect marketplace message
func (b *Prioritize) CollectMarketplaceMessage(msg MarketplaceMessage) error {
b.begin("CollectMarketplaceMessage")
defer b.done()
return b.bot.collectMarketplaceMessage(msg)
}

// GetExpeditionMessages gets the expedition messages
func (b *Prioritize) GetExpeditionMessages() ([]ExpeditionMessage, error) {
b.begin("GetExpeditionMessages")
Expand Down
Loading

0 comments on commit 48e08c8

Please sign in to comment.