#HarmonyOS NEXT体验官#藏头诗应用 原创

早起睡不够
发布于 2024-7-27 17:32
浏览
1收藏

藏头诗应用

目前支持的功能

  1. 输入主题和关键词:用户可以输入特定的主题,如爱情、友情、生日等,以及相关的关键词,以便生成更贴合需求的藏头诗。

  2. 选择诗体和格律:提供多种诗体选项,如五言绝句、七言律诗等,并能遵循相应的格律规则生成。

  3. 押韵模式选择:让用户决定是押平声韵、仄声韵还是通押。

  4. 风格设定:例如古典风格、现代风格、幽默风格、深情风格等。

  5. 自定义藏头内容:不仅能藏头词语,还能藏头句子或名字。

  6. 诗句解释:对生成的藏头诗中的每一句进行详细的解释,帮助用户理解诗意。

  7. 分享和保存:支持将生成的藏头诗分享到社交媒体,或者保存为图片、文档等格式。

  8. 灵感提示:在用户创作藏头内容遇到困难时,提供一些灵感和示例。

  9. 诗词修改建议:如果用户对生成的诗不满意,给出修改的方向和建议。

  10. 历史记录:保存用户生成过的藏头诗,方便回顾和再次编辑。

效果

#HarmonyOS NEXT体验官#藏头诗应用-鸿蒙开发者社区

#HarmonyOS NEXT体验官#藏头诗应用-鸿蒙开发者社区

接下来,我们一起来看一下,如何实现的。

创建项目

#HarmonyOS NEXT体验官#藏头诗应用-鸿蒙开发者社区

添加网络权限

因为数据来自于我们的后台,所以需要网络权限。

"requestPermissions": [
  {
    "name": "ohos.permission.INTERNET"
  }
],

发起网络请求

接口

请求方法: [ “GET”, “POST” ]

请求参数:

名称 必填 类型 描述 示例
token true string 请求token,用户中心获取。 用户中心获取token
keyword true string 藏字内容,2-8个字 我喜欢你
num false int 诗句格式,5五言诗[默认]、7七言诗 5
type int 藏头位置,1藏头[默认]、2藏尾、3藏中、4递增、5递减 1
rhyme 押韵类型,1双句一压[默认]、2双句押韵、3一三四押

返回参数:

名称 描述
keyword 输入关键字
poem 生成的藏头诗
list 数组格式

返回状态码 code 描述参照

错误码 说明
200 返回200表示接口正常
404 接口地址不存在
422 接口请求失败
400 接口请求失败
405 请求方法不被允许
100 token 错误
101 账号过期
102 接口请求次数超过限制
104 来源或者ip不在白名单
406 没有更多数据了
429 请求 QPS 超过限制

返回参数

{
  "code": 200,
  "msg": "success",
  "data": {
    "keyword": "夏天我错了",
    "poem": "夏云生此日,天庭玉帛陈。我忧长于生,错落北斗星。了与世事绝,日暮微风起。",
    "list": [
      "夏云生此日",
      "天庭玉帛陈",
      "我忧长于生",
      "错落北斗星",
      "了与世事绝",
      "日暮微风起"
    ]
  },
  "time": 1721998111,
  "usage": 0,
  "log_id": "675442796677423104"
}

Axios请求

Axios ,是一个基于 promise 的网络请求库,可以运行 node.js 和浏览器中。本库基于Axios 原库v1.3.4版本进行适配,使其可以运行在 OpenHarmony,并沿用其现有用法和特性。

  • http 请求
  • Promise API
  • request 和 response 拦截器
  • 转换 request 和 response 的 data 数据
  • 自动转换 JSON data 数据

请求数据

getData(num: number, type: number, rhyme: number) {

  interface Post {
    keyword: string,
    num: number
    type: number
    rhyme: number
    token: string
  }

  axios.post<string, AxiosResponse<string>, Post>('你的url', {
    keyword: this.keyword,
    num: num,
    type: type,
    rhyme: rhyme,
    token: "你的token"
  })
    .then((response: AxiosResponse<string>) => {
      console.info(JSON.stringify(response));

      this.msg = JSON.stringify(response.data)

      let PoemInfoModel: PoemInfoModel = JSON.parse(JSON.stringify(response.data))
      let poemInfo = PoemInfoModel.data


      router.pushUrl({
        url: "pages/DetailsPage"
      ,
        params: poemInfo
      })
    })
    .catch((error: AxiosError) => {
      console.info(JSON.stringify(error));
    });


}

数据渲染

build() {
  Column() {
    // Text(this.msg)
    Text("藏头诗").fontSize(30)

    Text("一诗一世界") .fontSize(20). fontColor(Color.Orange).textShadow({
      radius: 10,
      color: Color.Orange,
      offsetX: 0,
      offsetY: 0
    })
    Text("一意一乾坤").fontSize(20) .fontColor(Color.Orange)
      .textShadow({
      radius: 10,
      color: Color.Orange,
      offsetX: 0,
      offsetY: 0
    })
    TextInput({

      placeholder: "请输出"
    ,
      text: this.keyword
    }).onChange((e: string) => {
      this.keyword = e


    })
      .width("80%")

    Text("格式")

    Row() {

      overBuilder(5, "五言", "checknum", (type: number) => {

        this.num = 5

      })
      overBuilder(7, "七言", "checknum", (type: number) => {

        this.num = 7

      })
      CheckBox({
        value: 7,
        title: "七言",
        groupname: "checknum",
        changeFactory: (type: number) => {

          this.num = 7

        }
      })
    }

    Text("位置")
    Flex({
      justifyContent: FlexAlign.Start,
      wrap: FlexWrap.Wrap
    }) {

      overBuilder(1, "藏头", "checktype", (type: number) => {

        this.type = 3

      })
      CheckBox({
        value: 1,
        title: "藏头",
        groupname: "checktype"
      ,
        changeFactory: (type: number) => {

          this.type = 1

        }
      })
      CheckBox({
        value: 2,
        title: "藏尾",
        groupname: "checktype"
      ,
        changeFactory: (type: number) => {

          this.type = 2

        }

      })
      CheckBox({
        value: 3,
        title: "藏中",
        groupname: "checktype",
        changeFactory: (type: number) => {

          this.type = 3

        }
      })
      CheckBox({
        value: 4,
        title: "递增",
        groupname: "checktype",
        changeFactory: (type: number) => {

          this.type = type

        }
      })

      CheckBox({
        value: 5,
        title: "递减",
        groupname: "checktype",
        changeFactory: (type: number) => {
          this.type = type

        }
      })
    }

    Text("押韵")
    Row() {
      CheckBox({
        value: 1,
        title: "双句一押",
        groupname: "checkrhyme"
      ,
        changeFactory: (type: number) => {
          this.rhyme = type

        }

      })
      CheckBox({
        value: 2,

        title: "双句押韵 ",
        groupname: "checkrhyme"
      ,
        changeFactory: (type: number) => {
          this.rhyme = type

        }

      })
      CheckBox({
        value: 3,
        title: "一三四押",
        groupname: "checkrhyme",
        changeFactory: (type: number) => {
          this.rhyme = type

        }
      })


    }

    Text("开始作诗").fontSize(32)
      .onClick(() => {
        this.getData(this.num, this.type, this.rhyme)
      })
  }
  .height('100%')
  .width('100%').backgroundImage($r("app.media.img_1")).backgroundImageSize({
    width: "100%",
    height: "100%"
  })
}

这里我们还可以自定义组件

@ComponentV2
export struct CheckBox {
  @Param value: number = 0
  @Param title: string = ""
  @Param groupname: string = ""
  @Param changeFactory: (x: number) => void = (x: number) => {
  };

  build() {
    Row() {
      Radio({ value: this.value.toString(), group: this.groupname })
        .onChange((value: boolean) => {
          console.info('Checkbox1 change is' + value)
        })
        .width(30)
        .height(30)
      Text(this.title).fontSize(20)
    }.onClick(() => {
      this.changeFactory(this.value)
    })
  }
}

编译运行

开发完成,就可以编译运行啦。

#HarmonyOS NEXT体验官#藏头诗应用-鸿蒙开发者社区

©著作权归作者所有,如需转载,请注明出处,否则将追究法律责任
标签
已于2024-7-27 17:33:27修改
收藏 1
回复
举报
1条回复
按时间正序
/
按时间倒序
六合李欣
六合李欣

请问藏头诗应用的链接有吗?谢谢

回复
2024-8-16 13:21:43
回复
    相关推荐