Ejemplo n.º 1
0
 public bool AddPhrase(int accountID, string text, SourceType sourceType)
 {
     return InvokeSafeSingleCall(() => {
         text = text.ToLower();
         var phrase = Phrase.DataSource
             .WhereEquals(Phrase.Fields.Text, text)
             .WhereEquals(Phrase.Fields.CollectionIdentity, (short)AlgoBase.CollectionIdentity)
             .First();
         if (phrase == null) {
             phrase = new Phrase {
                 Datecreated = DateTime.UtcNow,
                 Text = text,
                 Status = PhraseStatus.NotCollected,
                 CollectionIdentity = AlgoBase.CollectionIdentity,
             };
             phrase.Save();
         }
         var phraseAccount = Phraseaccount.DataSource
             .WhereEquals(Phraseaccount.Fields.AccountidentityID, accountID)
             .WhereEquals(Phraseaccount.Fields.PhraseID, phrase.ID)
             .WhereEquals(Phraseaccount.Fields.CollectionIdentity, (short)AlgoBase.CollectionIdentity)
             .First();
         if (phraseAccount == null) {
             phraseAccount = new Phraseaccount {
                 Datecreated = DateTime.UtcNow,
                 AccountidentityID = accountID,
                 PhraseID = phrase.ID,
                 SourceType = sourceType,
                 CollectionIdentity = AlgoBase.CollectionIdentity
             };
         } else {
             phraseAccount.SourceType |= sourceType;
         }
         return phraseAccount.Save();
     }, false);
 }
        protected override void DoAction()
        {
            var entities = GetEntitiesToProcess();
            foreach (var entity in entities) {
                var queriesForDomain = new HashSet<string>();
                entity.Status |= DomainStatus.PhrasesCollected;
                try {
                    for (var page = 1;; page++) {
                        var hasUnique = false;
                        var content = SpywordsQueryWrapper.GetQueriesForDomain(entity.Domain, page);
                        var listLinksToInsert = new List<Domainphrase>();
                        foreach (Match wordMatch in _siteSpywordsExpractor.Matches(content)) {
                            var word = wordMatch.Groups["word"].Value.ToLower();
                            if (queriesForDomain.Contains(word)) {
                                continue;
                            }
                            queriesForDomain.Add(word);
                            hasUnique = true;
                            var phrase = Phrase.DataSource
                                .WhereEquals(Phrase.Fields.Text, word)
                                .First(Phrase.Fields.ID);
                            if(phrase == null) {
                                phrase = new Phrase {
                                    Datecreated = DateTime.UtcNow,
                                    Status = PhraseStatus.NotCollected,
                                    CollectionIdentity = CollectionIdentity,
                                    Text = word
                                };
                                phrase.Save();
                            }
                            var firstDomainPhrase = Domainphrase.DataSource
                                .WhereEquals(Domainphrase.Fields.DomainID, entity.ID)
                                .WhereEquals(Domainphrase.Fields.PhraseID, phrase.ID)
                                .First();
                            if (firstDomainPhrase == null) {
                                var domainphrase = new Domainphrase {
                                    DomainID = entity.ID,
                                    PhraseID = phrase.ID,
                                    SourceType = SourceType.Context,
                                    CollectionIdentity = CollectionIdentity
                                };
                                listLinksToInsert.Add(domainphrase);
                            } else {
                                firstDomainPhrase.SourceType |= SourceType.Context;
                                firstDomainPhrase.Save();
                            }
                        }
                        TaskRunner.Instance.AddAction(() => {
                            listLinksToInsert.Save<Domainphrase, int>();
                        });
                        if (!hasUnique) {
                            break;
                        }
                    }
                }
                catch (Exception ex) {
                    Logger.Error(ex);
                    entity.Status |= DomainStatus.PhrasesCollectedError;
                }

                entity.Save();
            }
        }