Changeset 40 in code for trunk/engines/google.go


Ignore:
Timestamp:
Sep 28, 2023, 7:45:12 AM (21 months ago)
Author:
manerakai
Message:

Fixed bug

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/engines/google.go

    r32 r40  
    154154        }
    155155        responseText := string(bodyBytes)
    156 
    157         responseText = regexp.MustCompile(`\n\d+\n(.*)\n\d+\n`).FindStringSubmatch(responseText)[1]
    158 
    159         var raw []interface{}
    160         err = json.Unmarshal([]byte(responseText), &raw)
    161         if err != nil {
    162                 fmt.Println("Error:", err)
    163                 return TranslationResult{}, nil
    164         }
     156        responseTextList := regexp.MustCompile(`\n\d+\n(.*)\n\d+\n`).FindStringSubmatch(responseText)
    165157        definitions := make(map[string][]map[string]interface{})
    166158        translations := make(map[string]map[string]map[string]interface{})
    167 
    168         if len(raw) > 0 && raw[0] != nil &&
    169                 len(raw[0].([]interface{})) > 2 && raw[0].([]interface{})[2] != nil {
    170                 data := raw[0].([]interface{})[2].(string)
    171 
    172                 var json_ []interface{}
    173                 err = json.Unmarshal([]byte(data), &json_)
    174 
    175                 if len(json_) > 3 && json_[3] != nil &&
    176                         len(json_[3].([]interface{})) > 1 && json_[3].([]interface{})[1] != nil &&
    177                         len(json_[3].([]interface{})[1].([]interface{})) > 0 && json_[3].([]interface{})[1].([]interface{})[0] != nil {
    178                         for x := 0; x < len(json_[3].([]interface{})[1].([]interface{})[0].([]interface{})); x++ {
    179                                 if len(json_[3].([]interface{})[1].([]interface{})[0].([]interface{})[x].([]interface{})) > 0 {
    180                                         definitionType := json_[3].([]interface{})[1].([]interface{})[0].([]interface{})[x].([]interface{})[0]
    181                                         if definitionType == nil {
    182                                                 definitionType = "unknown"
    183                                         }
    184 
    185                                         definitions[definitionType.(string)] = []map[string]interface{}{}
    186 
    187                                         for i := 0; i < len(json_[3].([]interface{})[1].([]interface{})[0].([]interface{})[x].([]interface{})[1].([]interface{})); i++ {
    188                                                 definitionBox := json_[3].([]interface{})[1].([]interface{})[0].([]interface{})[x].([]interface{})[1].([]interface{})[i].([]interface{})
    189                                                 definitions[definitionType.(string)] = append(definitions[definitionType.(string)], map[string]interface{}{})
    190 
    191                                                 if len(definitionBox) > 4 && definitionBox[4] != nil &&
    192                                                         len(definitionBox[4].([]interface{})) > 0 && definitionBox[4].([]interface{})[0] != nil &&
    193                                                         len(definitionBox[4].([]interface{})[0].([]interface{})) > 0 && definitionBox[4].([]interface{})[0].([]interface{})[0] != nil {
    194                                                         definitions[definitionType.(string)][i]["dictionary"] = definitionBox[4].([]interface{})[0].([]interface{})[0]
    195                                                 }
    196 
    197                                                 if len(definitionBox) > 0 && definitionBox[0] != nil {
    198                                                         definitions[definitionType.(string)][i]["definition"] = definitionBox[0]
    199                                                 }
    200 
    201                                                 if len(definitionBox) > 1 && definitionBox[1] != nil {
    202                                                         definitions[definitionType.(string)][i]["use_in_sentence"] = definitionBox[1]
    203                                                 }
    204 
    205                                                 if len(definitionBox) > 5 && definitionBox[5] != nil {
    206                                                         definitions[definitionType.(string)][i]["synonyms"] = map[string][]string{}
    207                                                         synonyms := definitionBox[5].([]interface{})
    208                                                         synonymsMap := make(map[string][]string)
    209 
    210                                                         for _, synonymBox := range synonyms {
    211                                                                 synonymType := ""
    212                                                                 if len(synonymBox.([]interface{})) > 1 && synonymBox.([]interface{})[1] != nil &&
    213                                                                         len(synonymBox.([]interface{})[1].([]interface{})) > 0 && synonymBox.([]interface{})[1].([]interface{})[0] != nil {
    214                                                                         synonymType = synonymBox.([]interface{})[1].([]interface{})[0].([]interface{})[0].(string)
    215                                                                 }
    216 
    217                                                                 if len(synonymBox.([]interface{})) > 0 && synonymBox.([]interface{})[0] != nil {
    218                                                                         synonymList := synonymBox.([]interface{})[0].([]interface{})
    219                                                                         synonymsMap[synonymType] = []string{}
    220                                                                         for _, synonymTypeWord := range synonymList {
    221                                                                                 synonymsMap[synonymType] = append(synonymsMap[synonymType], synonymTypeWord.([]interface{})[0].(string))
     159        if len(responseTextList) > 0 {
     160                responseText = responseTextList[1]
     161                var raw []interface{}
     162                err = json.Unmarshal([]byte(responseText), &raw)
     163                if err != nil {
     164                        fmt.Println("Error:", err)
     165                        return TranslationResult{}, nil
     166                }
     167
     168                if len(raw) > 0 && raw[0] != nil &&
     169                        len(raw[0].([]interface{})) > 2 && raw[0].([]interface{})[2] != nil {
     170                        data := raw[0].([]interface{})[2].(string)
     171
     172                        var json_ []interface{}
     173                        err = json.Unmarshal([]byte(data), &json_)
     174
     175                        if len(json_) > 3 && json_[3] != nil &&
     176                                len(json_[3].([]interface{})) > 1 && json_[3].([]interface{})[1] != nil &&
     177                                len(json_[3].([]interface{})[1].([]interface{})) > 0 && json_[3].([]interface{})[1].([]interface{})[0] != nil {
     178                                for x := 0; x < len(json_[3].([]interface{})[1].([]interface{})[0].([]interface{})); x++ {
     179                                        if len(json_[3].([]interface{})[1].([]interface{})[0].([]interface{})[x].([]interface{})) > 0 {
     180                                                definitionType := json_[3].([]interface{})[1].([]interface{})[0].([]interface{})[x].([]interface{})[0]
     181                                                if definitionType == nil {
     182                                                        definitionType = "unknown"
     183                                                }
     184
     185                                                definitions[definitionType.(string)] = []map[string]interface{}{}
     186
     187                                                for i := 0; i < len(json_[3].([]interface{})[1].([]interface{})[0].([]interface{})[x].([]interface{})[1].([]interface{})); i++ {
     188                                                        definitionBox := json_[3].([]interface{})[1].([]interface{})[0].([]interface{})[x].([]interface{})[1].([]interface{})[i].([]interface{})
     189                                                        definitions[definitionType.(string)] = append(definitions[definitionType.(string)], map[string]interface{}{})
     190
     191                                                        if len(definitionBox) > 4 && definitionBox[4] != nil &&
     192                                                                len(definitionBox[4].([]interface{})) > 0 && definitionBox[4].([]interface{})[0] != nil &&
     193                                                                len(definitionBox[4].([]interface{})[0].([]interface{})) > 0 && definitionBox[4].([]interface{})[0].([]interface{})[0] != nil {
     194                                                                definitions[definitionType.(string)][i]["dictionary"] = definitionBox[4].([]interface{})[0].([]interface{})[0]
     195                                                        }
     196
     197                                                        if len(definitionBox) > 0 && definitionBox[0] != nil {
     198                                                                definitions[definitionType.(string)][i]["definition"] = definitionBox[0]
     199                                                        }
     200
     201                                                        if len(definitionBox) > 1 && definitionBox[1] != nil {
     202                                                                definitions[definitionType.(string)][i]["use_in_sentence"] = definitionBox[1]
     203                                                        }
     204
     205                                                        if len(definitionBox) > 5 && definitionBox[5] != nil {
     206                                                                definitions[definitionType.(string)][i]["synonyms"] = map[string][]string{}
     207                                                                synonyms := definitionBox[5].([]interface{})
     208                                                                synonymsMap := make(map[string][]string)
     209
     210                                                                for _, synonymBox := range synonyms {
     211                                                                        synonymType := ""
     212                                                                        if len(synonymBox.([]interface{})) > 1 && synonymBox.([]interface{})[1] != nil &&
     213                                                                                len(synonymBox.([]interface{})[1].([]interface{})) > 0 && synonymBox.([]interface{})[1].([]interface{})[0] != nil {
     214                                                                                synonymType = synonymBox.([]interface{})[1].([]interface{})[0].([]interface{})[0].(string)
     215                                                                        }
     216
     217                                                                        if len(synonymBox.([]interface{})) > 0 && synonymBox.([]interface{})[0] != nil {
     218                                                                                synonymList := synonymBox.([]interface{})[0].([]interface{})
     219                                                                                synonymsMap[synonymType] = []string{}
     220                                                                                for _, synonymTypeWord := range synonymList {
     221                                                                                        synonymsMap[synonymType] = append(synonymsMap[synonymType], synonymTypeWord.([]interface{})[0].(string))
     222                                                                                }
    222223                                                                        }
    223224                                                                }
    224                                                         }
    225 
    226                                                         definitions[definitionType.(string)][i]["synonyms"] = synonymsMap
     225
     226                                                                definitions[definitionType.(string)][i]["synonyms"] = synonymsMap
     227                                                        }
    227228                                                }
    228229                                        }
    229230                                }
    230231                        }
    231                 }
    232 
    233                 if len(json_) > 3 && json_[3] != nil &&
    234                         len(json_[3].([]interface{})) > 5 && json_[3].([]interface{})[5] != nil &&
    235                         len(json_[3].([]interface{})[5].([]interface{})) > 0 && json_[3].([]interface{})[5].([]interface{})[0] != nil {
    236                         translationBox := json_[3].([]interface{})[5].([]interface{})[0].([]interface{})
    237                         for x := 0; x < len(translationBox); x++ {
    238                                 if len(translationBox[x].([]interface{})) > 0 {
    239                                         translationType := translationBox[x].([]interface{})[0]
    240                                         if translationType == nil {
    241                                                 translationType = "unknown"
    242                                         }
    243                                         translations[translationType.(string)] = make(map[string]map[string]interface{})
    244 
    245                                         if len(translationBox[x].([]interface{})) > 1 && translationBox[x].([]interface{})[1] != nil {
    246                                                 translationNamesBox := translationBox[x].([]interface{})[1].([]interface{})
    247                                                 for i := 0; i < len(translationNamesBox); i++ {
    248                                                         if len(translationNamesBox[i].([]interface{})) > 0 && translationNamesBox[i].([]interface{})[0] != nil {
    249                                                                 translationName := translationNamesBox[i].([]interface{})[0].(string)
    250                                                                 translations[translationType.(string)][translationName] = make(map[string]interface{})
    251                                                                 if len(translationNamesBox[i].([]interface{})) > 3 && translationNamesBox[i].([]interface{})[3] != nil {
    252                                                                         frequency := fmt.Sprintf("%d", int(translationNamesBox[i].([]interface{})[3].(float64)))
    253                                                                         if frequency == "3" {
    254                                                                                 frequency = "1"
    255                                                                         } else if frequency == "1" {
    256                                                                                 frequency = "3"
    257                                                                         }
    258                                                                         translations[translationType.(string)][translationName]["frequency"] = frequency + "/3"
    259 
    260                                                                         translations[translationType.(string)][translationName]["words"] = []string{}
    261                                                                         if len(translationNamesBox[i].([]interface{})) > 2 && translationNamesBox[i].([]interface{})[2] != nil {
    262                                                                                 for z := 0; z < len(translationNamesBox[i].([]interface{})[2].([]interface{})); z++ {
    263                                                                                         word := translationNamesBox[i].([]interface{})[2].([]interface{})[z].(string)
    264                                                                                         translations[translationType.(string)][translationName]["words"] = append(translations[translationType.(string)][translationName]["words"].([]string), word)
     232
     233                        if len(json_) > 3 && json_[3] != nil &&
     234                                len(json_[3].([]interface{})) > 5 && json_[3].([]interface{})[5] != nil &&
     235                                len(json_[3].([]interface{})[5].([]interface{})) > 0 && json_[3].([]interface{})[5].([]interface{})[0] != nil {
     236                                translationBox := json_[3].([]interface{})[5].([]interface{})[0].([]interface{})
     237                                for x := 0; x < len(translationBox); x++ {
     238                                        if len(translationBox[x].([]interface{})) > 0 {
     239                                                translationType := translationBox[x].([]interface{})[0]
     240                                                if translationType == nil {
     241                                                        translationType = "unknown"
     242                                                }
     243                                                translations[translationType.(string)] = make(map[string]map[string]interface{})
     244
     245                                                if len(translationBox[x].([]interface{})) > 1 && translationBox[x].([]interface{})[1] != nil {
     246                                                        translationNamesBox := translationBox[x].([]interface{})[1].([]interface{})
     247                                                        for i := 0; i < len(translationNamesBox); i++ {
     248                                                                if len(translationNamesBox[i].([]interface{})) > 0 && translationNamesBox[i].([]interface{})[0] != nil {
     249                                                                        translationName := translationNamesBox[i].([]interface{})[0].(string)
     250                                                                        translations[translationType.(string)][translationName] = make(map[string]interface{})
     251                                                                        if len(translationNamesBox[i].([]interface{})) > 3 && translationNamesBox[i].([]interface{})[3] != nil {
     252                                                                                frequency := fmt.Sprintf("%d", int(translationNamesBox[i].([]interface{})[3].(float64)))
     253                                                                                if frequency == "3" {
     254                                                                                        frequency = "1"
     255                                                                                } else if frequency == "1" {
     256                                                                                        frequency = "3"
     257                                                                                }
     258                                                                                translations[translationType.(string)][translationName]["frequency"] = frequency + "/3"
     259
     260                                                                                translations[translationType.(string)][translationName]["words"] = []string{}
     261                                                                                if len(translationNamesBox[i].([]interface{})) > 2 && translationNamesBox[i].([]interface{})[2] != nil {
     262                                                                                        for z := 0; z < len(translationNamesBox[i].([]interface{})[2].([]interface{})); z++ {
     263                                                                                                word := translationNamesBox[i].([]interface{})[2].([]interface{})[z].(string)
     264                                                                                                translations[translationType.(string)][translationName]["words"] = append(translations[translationType.(string)][translationName]["words"].([]string), word)
     265                                                                                        }
    265266                                                                                }
    266267                                                                        }
     
    271272                                }
    272273                        }
    273                 }
    274 
    275                 if len(json_) > 0 && json_[0] != nil && len(json_[0].([]interface{})) > 2 && json_[0].([]interface{})[2] != nil {
    276                         from = json_[0].([]interface{})[2].(string)
     274
     275                        if len(json_) > 0 && json_[0] != nil && len(json_[0].([]interface{})) > 2 && json_[0].([]interface{})[2] != nil {
     276                                from = json_[0].([]interface{})[2].(string)
     277                        }
     278
    277279                }
    278280        }
Note: See TracChangeset for help on using the changeset viewer.